我需要得到两个日期之间月份的差额,我使用的是乔达时间,问题是这样的:
DateTime date1 = new DateTime().withDate(2015, 2, 1);
DateTime date2 = new DateTime().withDate(2015, 1, 1);
Months m = Months.monthsBetween(date1, date2);
int monthDif = m.getMonths();//this return 0
它返回0,因为两个日期中间没有月份,我需要以几个月而不是几个月为单位返回差额,并且当日期相同时,将1加成问题。
将首个日期更改为2015-02-02,Joda会正确返回1个月:
DateTime date1 = new DateTime().withDate(2015, 2, 2);
DateTime date2 = new DateTime().withDate(2015, 1, 1);
System.out.println(Months.monthsBetween(date2, date1).getMonths());
// Returns 1.
因此,我的猜测是,由于您没有提供时间部分,因此Joda无法确切知道2015年1月1日 date2
所指的时间点。您可能已经提到23:59:59,在这种情况下,从技术上讲,还没有整整一个月。
如果您明确提供零时间部分,则它会按您最初的预期工作:
DateTime date1 = new DateTime().withDate(2015, 2, 1).withTime(0, 0, 0, 0);
DateTime date2 = new DateTime().withDate(2015, 1, 1).withTime(0, 0, 0, 0);
System.out.println(Months.monthsBetween(date2, date1).getMonths());
// Returns 1.
因此,建议您在每个日期中明确指定一个00:00:00时间部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句