【问题标题】:Right Period between two Java Dates两个 Java 日期之间的正确句点
【发布时间】:2012-12-18 17:58:18
【问题描述】:

我需要帮助来获取两个 Java 日期之间的句点。我使用 JodaTime 进行计算,但结果不正确。

开始:11.11.2012 12:00
结束:16.12.2012 20:15
(德国时间标准)
结果必须是 5 周 0 天 8 小时 15 分钟。

我试试

Period period = new Period( start.getTime(), end.getTime() );
weeks = Weeks.weeksBetween( new DateTime( start ), new DateTime( end ) ).getWeeks();
days = period.getDays();
hours = period.getHours();
minutes = period.getMinutes();

得到了 5w 5d 8h 15m。

编辑:
感谢您的帮助,但我认为我使用 JodaTime Period 错误。当然是 5w 5d 8h 15m 的输出,但我想要的更像这样。

int days = Days.daysBetween( start, end ); // musst be 35 days
int weeks = ( days - ( days % 7 ) ) / 7;
days = days % 7;

现在我的结果是 5 周零 0 天。很抱歉造成混乱,感谢您的帮助。

【问题讨论】:

  • 你得到了什么输出?
  • 您可能需要% 7 才能获得days
  • % 7 什么都不做,因为 5 mod 7 = 5 但谢谢你的想法。

标签: java jodatime


【解决方案1】:
    DateTime start = new DateTime(new Date(2012, 11, 11, 12, 00, 00));
    DateTime end = new DateTime(new Date(2012, 12, 16, 20, 15, 00));
    Period period = new Period(start, end);
    System.out.println("Weeks: " + Weeks.weeksBetween( new DateTime( start ), new DateTime( end ) ).getWeeks());
    System.out.println("Days: " + period.getDays());
    System.out.println("Hours: " + period.getHours());
    System.out.println("Minutes: " + period.getMinutes());  

输出是

    Weeks: 5
    Days: 5
    Hours: 8
    Minutes: 15  

像魅力一样工作
而不是Weeks.weeksBetween,您可以使用下一个解决方案(使用PeriodType

PeriodType periodType = PeriodType.standard().withMonthsRemoved();
Period period = new Period(new Date(2012, 11, 11, 12, 00, 00).getTime(), new Date(2012, 12, 16, 20, 15, 00).getTime(), periodType);
System.out.println(period.getWeeks());  

输出是

5

【讨论】:

  • 对不起,我删除了我之前的评论。您只是没有显示月份字段。但是您当前的方法不太正确。在 11 月 11 日增加 5 周将获得 16 月 12 日,然后再增加 5 天获得 21 月 12 日
  • 酷,您应该只在原始 sn-p 中使用 PeriodType 方法,您将不再需要 Weeks,并产生所需的输出。
【解决方案2】:

对于您想要的输出,我相信这是解决方案:

    DateTime start = new DateTime(2012, 11, 11, 12, 0);
    DateTime end = new DateTime(2012, 12, 16, 20, 15);

    Weeks weeks = Weeks.weeksBetween(start, end);
    Period period = new Period(start.plus(weeks), end);
    System.out.println("Weeks : " + weeks.getWeeks());
    System.out.println("Days : " + period.getDays());
    System.out.println("Hours : " + period.getHours());
    System.out.println("Minutes : " + period.getMinutes());

期间将计算一个月而不是 5 周。因此,我们首先计算两个日期之间的周数,然后使用句点作为余数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2018-05-09
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多