【问题标题】:Period between dates using Java/Joda使用 Java/Joda 的日期之间的时间段
【发布时间】:2013-07-14 22:13:31
【问题描述】:

我有 2 个约达约会,如下所示:

org.joda.time.DateTime a;
org.joda.time.DateTime b;

我想要两个日期之间的年、月和日之间的差异(例如 0 年、2 个月、5 天)。
我可以使用org.joda.time.Days.daysBetween(a, b)monthsBetween(a, b)yearsBetween(a, b) 分别获取每个值的全部值。 由于一个月确实有固定的天数,我该如何计算呢?

例如。如果我得到monthsbetween = 2daysbetween = 65,我怎么能写成"2 months and x days"

还有其他方法可以得到吗?

【问题讨论】:

  • 你看过Period( a.getMillis(), b.getMillis(), PeriodType.yearMonthDay() )之类的东西吗?
  • 谢谢!结合org.joda.time.format.PeriodFormatter,您使用Period 的建议效果很好。

标签: java date jodatime


【解决方案1】:

试试这个:

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));

【讨论】:

  • 感谢您的回答。 @n0741337 的建议方式正是我想要的:)。
【解决方案2】:

我对 Joda 不太熟悉,但您最好的选择是将剩余天数除以 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,因为这似乎是一个不错的平均月份长度,不包括 2 月。因为没有设定一个月的长度,所以我们只能用这些整数来做最好的事情。

【讨论】:

  • 我想过这样做,但是对于 2 月份来说,这会给我一个遥不可及的答案 :)
猜你喜欢
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2011-09-02
  • 2017-04-14
相关资源
最近更新 更多