Java - 从日期减去天数

Jim*_*imD 3 java calendar date

我试图从最初以字符串形式出现的日期减去5天.

我已经看了一些关于这个主题的其他帖子,但我从代码中得到的结果总是不正确的.主要问题是,当减去天数时,年份值似乎没有变化 - 2012-01-01 subtract 5 days gives me 'Jan 27 2012'使用此代码 -

cal.add(Calendar.DATE, -5);
Run Code Online (Sandbox Code Playgroud)

请帮忙.

Bru*_*eis 6

您是否知道,在Java中,月份1实际上是2月份?

Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01
Run Code Online (Sandbox Code Playgroud)

这可以解释你所看到的.如果您想要实例化2012-01-01,您应该:

Date firstDayOf2012 = new Date(2012,0,1); // this is 2012-01-01
Run Code Online (Sandbox Code Playgroud)

在处理时,完全相同的事情发生Calendar:

Calendar.getInstance().set(2012,0,1); // 2012-01-01
Run Code Online (Sandbox Code Playgroud)

一定要检查的文档Date(int, int, int)Calendar.set(int, int, int).此外,您可以检查解析字符串的方式.如果你使用SimpleDateFormat.parse(...),事情会变得更容易.

奇怪,不是吗?Go figure ...就像一个有趣的事实一样,IntelliJ的文档注释了第二个参数,月份@MagicConstant,以便记住程序员有一些非常奇怪的事情发生.