Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java/Joda的日期间隔_Java_Date_Jodatime - Fatal编程技术网

使用Java/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个月

我有两个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个月和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建议的方法正符合我的要求:)。