首页 > 解决方案 > 如何防止 JodaTime 周期的负面结果

问题描述

我需要在使用 JodaTime 的应用程序中计算两个小时之间的时间,这是我的代码:

DateTimeFormatter format = DateTimeFormat.forPattern("HH:mm");
        String s1 = textView9.getText().toString();
        String s2 = textView10.getText().toString();
        final DateTime dateTime1 = format.parseDateTime(s1);
        final DateTime dateTime2 = format.parseDateTime(s2);
        final PeriodFormatter periodFormatter = new PeriodFormatterBuilder()
                .printZeroAlways()
                .appendHours()
                .appendLiteral("h")
                .appendSeparator(":")
                .printZeroIfSupported()
                .appendMinutes()
                .appendLiteral("min")
                .toFormatter();
        String sum = periodFormatter.print(new Period(dateTime1, dateTime2));
        textView11.setText(sum);

到目前为止,这段代码可以工作并显示期间,但我注意到如果s1假设是午夜23:00之后s2的时间,假设19:00第二天的输出将是-4:00. 这是我的问题,JodaTime 是否具有轻松防止它的功能,或者这是我需要自己解决的某种问题?我在 SO 中寻找答案,但找不到可以帮助我的东西。我很高兴每个输入的答案和评论。

标签: javaandroidjodatime

解决方案


您可以在格式化之前检查句点是否为负数。如果是,则否定它以获得正周期。

Period period = new Period(dateTime1, dateTime2);
if (dateTime1.getMillis() > dateTime2.getMillis()) {
    // 23:00 > 19:00 --> Period = -4:00 + 24:00 = 20:00
    period = period.plusHours(24);
}
String sum = periodFormatter.print(period);
textView11.setText(sum);

免责声明:我从未使用过 JodaTime,只查看了文档,但我很确定这可行。


推荐阅读