且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java - 从日期中减去天数

更新时间:2023-11-29 13:20:40

您知道吗,在Java中,每月 1 实际上是二月?

  Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01 

这可能解释了你所看到的。如果你想实例化2012-01-01,你应该做:

  Date dateDayOf2012 = new Date(2012,0, 1); // this is 2012-01-01 

当处理 Calendar

  Calendar.getInstance()。set(2012,0,1) // 2012-01-01 

请务必检查 Date(int,int,int) Calendar.set(int,int,int) 。此外,您可以检查解析字符串的方式。如果您使用 SimpleDateFormat.parse(...) ,事情可以更容易。



奇怪,不是吗? Go figure ...作为一个有趣的事实,IntelliJ的文档注释了第二个参数,月, @MagicConstant ,记住程序员有一个很奇怪的事情。 / p>

I'm trying to subtract 5 days from a date which comes in as a string initially.

I have had a look at some of the other posts on this subject but the result i get from the code is always incorrect. The main problem is that the year value does not seem to change when the days are subtracted for example - 2012-01-01 subtract 5 days gives me 'Jan 27 2012' using this code -

cal.add(Calendar.DATE, -5);

Please help.

Did you know that, in Java, month 1 is actually February?

Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01

This might explain what you are seeing. If you want to instantiate 2012-01-01 instead, you should do:

Date firstDayOf2012 = new Date(2012,0,1); // this is 2012-01-01

Exactly the same thing happens when dealing with Calendar:

Calendar.getInstance().set(2012,0,1); // 2012-01-01

Be sure to check the documentation for Date(int, int, int) and Calendar.set(int, int, int). Also, you could check the way you are parsing the string. If you use SimpleDateFormat.parse(...), things can be easier.

Strange, isn't it? Go figure... Just as a fun fact, IntelliJ's documentation annotates this second parameter, month, with @MagicConstant, to remember the programmer that there's something very strange going on.