我正在开发一个 Android 应用程序,我需要计算一些时间(使用 Joda 库)。 我想知道是否存在执行此操作的 Java 类。
我想计算的情况(示例):
案例一:
t1 = "13:40"
t2 = "12:30"
result = t1 + t2 --> 26:10
案例二:
t1 = "13:40"
t2 = "12:30"
result = t1 - t2 --> 1:10
案例 2.1:
t1 = "13:40"
t2 = "14:00"
result = t1 - t2 --> -0:20
谢谢!! :)
最佳答案
以下 JodaTime 代码将输入和结果都处理为时间量,而不是时间点:
案例 1:
PeriodFormatterBuilder builder = new PeriodFormatterBuilder();
builder.minimumPrintedDigits(2);
builder.printZeroAlways();
builder.appendHours();
builder.appendLiteral(":");
builder.appendMinutes();
PeriodFormatter pf = builder.toFormatter();
Period period1 = pf.parsePeriod("13:40");
Period period2 = pf.parsePeriod("12:30");
Period total = period1.plus(period2);
Period normalized = total.normalizedStandard(PeriodType.time());
System.out.println("TOTAL PERIOD: " + total); // PT25H70M
System.out.println("NORMALIZED PERIOD: " + normalized); // PT26H10M
System.out.println("FORMATTED NORMALIZED PERIOD: " + pf.print(normalized)); // 26:10
案例 2 + 2.1:
PeriodFormatterBuilder builder = new PeriodFormatterBuilder();
builder.minimumPrintedDigits(2);
builder.printZeroAlways();
builder.appendHours();
builder.appendLiteral(":");
builder.appendMinutes();
PeriodFormatter pf = builder.toFormatter();
Period period1 = pf.parsePeriod("13:40");
Period period2 = pf.parsePeriod("14:00");
boolean negative = false;
if (period1.toStandardDuration().isShorterThan(period2.toStandardDuration())) {
Period tmp = period1;
period1 = period2;
period2 = tmp;
negative = true;
}
Period total = period1.minus(period2);
Period normalized = total.normalizedStandard(PeriodType.time());
System.out.println("NORMALIZED PERIOD: " + (negative ? "-" : "") + normalized);
System.out.println(
"FORMATTED NORMALIZED PERIOD: " + (negative ? "-" : "") + pf.print(normalized)
); // -00:20
请注意,由于 JodaTime 的符号处理不充分(它喜欢在句点表达式的中间而不是前面打印符号),一些笨拙的解决方法是必要的。
关于android - Java 中小时数的总和和差值(超过 24 小时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23061027/