如何在java中格式化持续时间? (例如格式 H:MM:SS)

新手上路,请多包涵

我想使用像 H:MM:SS 这样的模式来格式化持续时间(以秒为单位)。 Java 中的当前实用程序旨在格式化时间而不是持续时间。

原文由 kofte 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 619
2 个回答

如果您使用的是 8 之前的 Java 版本…您可以使用 Joda TimePeriodFormatter 。如果你真的有一个持续时间(即经过的时间量,没有参考日历系统)那么你应该使用 Duration 大多数情况下 - 然后你可以调用 toPeriod (指定任何 PeriodType 你想反映 25 小时是否变成 1 天和 1 小时等)以获得 Period 你可以格式化。

如果您使用的是 Java 8 或更高版本:我通常建议使用 java.time.Duration 来表示持续时间。然后,如果需要,您可以调用 getSeconds() 或类似的方法来根据 bobince 的回答获取标准字符串格式的整数 - 尽管您应该注意持续时间为负的情况,因为您可能需要输出字符串中的 单个 负号。所以像:

 public static String formatDuration(Duration duration) {
    long seconds = duration.getSeconds();
    long absSeconds = Math.abs(seconds);
    String positive = String.format(
        "%d:%02d:%02d",
        absSeconds / 3600,
        (absSeconds % 3600) / 60,
        absSeconds % 60);
    return seconds < 0 ? "-" + positive : positive;
}

以这种方式格式化是 相当 简单的,即使是令人讨厌的手动操作。对于 解析 来说,它通常变得更加困难……当然,如果你愿意,你仍然可以使用 Java 8 的 Joda Time。

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不想拖入库,那么使用 Formatter 或相关的快捷方式就足够简单了。给定整数秒数 s:

   String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));

原文由 bobince 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题