【问题标题】:JodaTime - hours and minutesJodaTime - 小时和分钟
【发布时间】:2015-11-13 16:41:18
【问题描述】:

我会计算不同时间间隔的小时和分钟。 我的方法是设置持续时间并在现有持续时间的基础上再添加一个持续时间。 我现在的问题是我如何至少将持续时间转换为小时和时间,以便结果是例如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

【问题讨论】:

  • 我不太清楚你想要达到什么目的 - 你的意思是你已经有了一个持续时间,你只想把它想象成小时和分钟?或者你正在努力获得你想要的持续时间?您能否发布一个简短但完整的示例,包含预期输出和实际输出?

标签: jodatime


【解决方案1】:

Duration JavaDoc

可以将持续时间转换为Period 以获取字段值。这种转换通常会导致精度损失。

所以要扩展你的测试用例:

@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 分钟。 因此,您可以将 Duration 转换为 Periods,也可以只使用 Periods,具体取决于您的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 2015-07-20
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多