JodaTime - 小时和分钟

时间:2015-11-12 18:02:42

标签: jodatime

我将计算不同间隔的小时和分钟。 我的方法是持续时间并为现有持续时间添加另一个持续时间。 我现在的问题是如何至少将持续时间转换为小时和时间,以便结果如下: 43:34(43小时34分钟)

非常感谢!

@Test
public void shouldCalculateHoursOfWeekAverage() throws BusinessException {
    final DateTime start1 = formatter.parseDateTime("02.10.2015 07:20");
    final DateTime end1 = formatter.parseDateTime("02.10.2015 12:00");

    final DateTime start2 = formatter.parseDateTime("02.10.2015 08:00");
    final DateTime end2 = formatter.parseDateTime("02.10.2015 12:00");

    final Duration duration1 = new Interval(start1, end1).toDuration();

    final Duration duration2 = duration1.withDurationAdded(new Interval(start2, end2).toDuration(), 1);

    System.out.println("duration2: " + duration2 + ", --> " + duration2.getStandardHours() + ":" + duration2.getStandardMinutes());
}

[编辑]

我有例如这个间隔(日期没有任何相关性,只有时间成为焦点):

08:30-12:00
14:00-17:00
13:00-18:00

我会总结一下,结果应该是这种情况: 11:30

1 个答案:

答案 0 :(得分:0)

请参阅{{3}}:

  

可以将持续时间转换为{{3}}以获取字段值。这种转换通常会导致精度下降。

所以扩展你的测试用例:

@Test
public void shouldCalculateHoursOfWeekAverage() {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm");
    DateTime start1 = formatter.parseDateTime("02.10.2015 07:20");
    DateTime end1 = formatter.parseDateTime("02.10.2015 12:00");

    DateTime start2 = formatter.parseDateTime("02.10.2015 08:00");
    DateTime end2 = formatter.parseDateTime("02.10.2015 12:00");

    Duration duration1 = new Interval(start1, end1).toDuration();

    Duration duration2 = duration1.withDurationAdded(new Interval(start2, end2).toDuration(), 1);

    System.out.println("duration2: " + duration2 + ", --> " + duration2.getStandardHours() + ":" + duration2.getStandardMinutes());

    // Convert to Period
    Period period = duration2.toPeriod();
    System.out.println("Period: " + period + ", --> " + period.getHours() + ":" + period.getMinutes());
}

打印

duration2: PT31200S, --> 8:520
Period: PT8H40M, --> 8:40

并且总持续时间/周期确实是8小时40分钟。 因此,您可以将持续时间转换为期间或仅使用期间,具体取决于您的使用案例。