android - Java 中小时数的总和和差值(超过 24 小时)

标签 android time date-arithmetic

我正在开发一个 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/

相关文章:

java - 如何动态地将英语 "abc123 "数字转换为阿拉伯语 "ابث١٢٣ "android

android - TextInputLayout 对在 EditText 中以编程方式给出提示无效

android - 使用移动版本在颠覆中分支的策略

perl - 我如何在执行的各个阶段进行 Perl CGI 性能测量、基准测试、时间测量?

java - 将字符串转换为时间

android - 如何将我的应用程序设置为默认接收短信

php - 将 24 小时时间格式的时间存储到具有列类型时间的数据库中

cocoa - 计算当前时间和下一个事件之间的秒数

sql-server - SQL Server 显示某些行,并在 where 中包含大小写

C#如何计算排除特定日期的工作日(节假日)