使用Java/Joda的日期间隔
我有两个joda日期,如下所示:使用Java/Joda的日期间隔,java,date,jodatime,Java,Date,Jodatime,我有两个joda日期,如下所示: org.joda.time.DateTime a; org.joda.time.DateTime b; 我想在年,月和天(例如0年,2个月,5天)方面的两个日期之间的差异 我可以使用org.joda.time.Days.daysBetween(a,b)或monthbetween(a,b)或years between(a,b)分别获得每个的完整值。 既然一个月有固定的天数,我该如何计算呢 例如,如果我得到月介于=2和天之间,介于=65之间,我如何将其写为“2个月
org.joda.time.DateTime a;
org.joda.time.DateTime b;
我想在年,月和天(例如0年,2个月,5天)方面的两个日期之间的差异我可以使用
org.joda.time.Days.daysBetween(a,b)
或monthbetween(a,b)
或years between(a,b)
分别获得每个的完整值。
既然一个月有固定的天数,我该如何计算呢
例如,如果我得到月介于=2
和天之间,介于=65
之间,我如何将其写为“2个月和x天”
还有其他方法吗?我对乔达不太熟悉,但看起来你最好的选择是将剩下的天数除以30.5,然后再将其取整为一个整数。像这样:
double daysDivided = daysbetween / 30.5;
int daysbetweenFixed = (int) daysDivided;
System.out.printf("%d months and %d days", monthsbetween, daysbetweenFixed);
//optional output ^
我相信你会知道我选择了30.5,因为它似乎是一个很好的平均月长,不包括二月。因为没有一个月的固定长度,所以我们只能用这些整数来做这件事。试试这个:
Calendar ca = Calendar.getInstance();
ca.setTime(a);
Calendar cb = Calendar.getInstance();
cb.setTime(b);
System.out.printf("%d months and %d days"
, ca.get(Calendar.MONTH) - cb.get(Calendar.MONTH)
, ca.get(Calendar.DAY_OF_MONTH) - cb.get(Calendar.DAY_OF_MONTH));
你看过类似于
Period(a.getMillis(),b.getMillis(),PeriodType.yearMonthDay())的东西吗?
?谢谢!结合org.joda.time.format.PeriodFormatter
,您建议使用Period
,效果很好。我曾想过这样做,但在2月份,这会给我一个远非如此的答案:)谢谢您的回答@n0741337建议的方法正符合我的要求:)。