我嘗試使用java DateTime
和方法plusMonths()
從給定開始日期添加完整月份。使用Java中的Joda-Time DateTime添加一個月迄今爲止失敗
當我開始時間是一個月的開始,一切工作像預期:
DateTime startOfMonth = new DateTime(2013, 1, 1, 00, 00, 00);
System.out.println(startOfMonth.toString());
for (int i = 0; i < 12; i++) {
startOfMonth = startOfMonth.plusMonths(1);
System.out.println(startOfMonth.toString());
}
輸出爲每月的第一天像預期,一切都很好!
2013-01-01T00:00:00.000+01:00
2013-02-01T00:00:00.000+01:00
2013-03-01T00:00:00.000+01:00
2013-04-01T00:00:00.000+02:00
2013-05-01T00:00:00.000+02:00
2013-06-01T00:00:00.000+02:00
2013-07-01T00:00:00.000+02:00
2013-08-01T00:00:00.000+02:00
2013-09-01T00:00:00.000+02:00
2013-10-01T00:00:00.000+02:00
2013-11-01T00:00:00.000+01:00
2013-12-01T00:00:00.000+01:00
2014-01-01T00:00:00.000+01:00
但是,當我改變我的例子到一個月結束它不會返回我想要的!
System.out.println("");
DateTime endOfMonth = new DateTime(2012, 12, 31, 23, 59, 59);
System.out.println(endOfMonth.toString());
for (int i = 0; i < 12; i++) {
endOfMonth = endOfMonth.plusMonths(1);
System.out.println(endOfMonth.toString());
}
這將返回:
2012-12-31T23:59:59.000+01:00
2013-01-31T23:59:59.000+01:00
2013-02-28T23:59:59.000+01:00
2013-03-28T23:59:59.000+01:00
2013-04-28T23:59:59.000+02:00
2013-05-28T23:59:59.000+02:00
2013-06-28T23:59:59.000+02:00
2013-07-28T23:59:59.000+02:00
2013-08-28T23:59:59.000+02:00
2013-09-28T23:59:59.000+02:00
2013-10-28T23:59:59.000+01:00
2013-11-28T23:59:59.000+01:00
2013-12-28T23:59:59.000+01:00
那麼,爲什麼"2013-02-28T23:59:59.000+01:00"
加上一個月不"2013-03-31T23:59:59.000+01:00"
? 這三天在哪裏?
也許你需要專門處理二月的情況。正如下面的答案表明這是DateTime的行爲方式。 – mawia
@mawia很多個月的時間少於31天。 –
這裏是得到本月最後一天的正確方法: http://stackoverflow.com/questions/9711454/how-to-get-the-last-date-of-a-particular-month-with- jodatime – Admit