当前位置: 首页 > 面试题库 >

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

令狐经武
2023-03-14
问题内容

我想使用H:MM:SS之类的格式以秒为单位格式化持续时间。Java中的当前实用程序旨在格式化时间而不是持续时间。


问题答案:

如果你使用的Java版本早于8 …,则可以使用Joda Time和PeriodFormatter。如果你确实有持续时间(例如,经过的时间量,没有参考日历系统),那么你可能应该Duration大部分时间都在使用-然后可以致电toPeriod(指定PeriodType要反映25小时是否变为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。



 类似资料:
  • 我正在将一个项目从Joda Time过渡到java8的本机时间库,我遇到了一个障碍。 我一直找不到持续时间的格式化程序。我想有一个自定义的字符串格式,例如HHH MM,其中75小时15分钟的持续时间将格式化为“75 15”。 通过转换为句点并使用句点Formatter,Joda-Time很容易做到这一点,但是我无法在Java8中找到这种类型的类。我错过了什么吗?

  • 问题内容: 我正在使用Java的SimpleDateFormat将毫秒数转换为一种不错的“ hh:mm:ss:SSS”格式的秒表。问题是小时数字段中总是有一些随机数。这是我正在使用的代码: 如果我摘下hh部分,那么它工作正常。否则,在hh部分中,即使传入的参数(毫秒数)为零,它也会显示诸如“ 07”之类的随机内容。 我对SimpleDateFormat类不太了解。谢谢你的帮助。 问题答案: 以下是

  • 我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)

  • 这个程序的输出与预期的一样,它给出2014-12-01 17:30:15。 但是当我在iFormat中将hh替换为hh(与outputformat相同)时,它给出的输出为12Out格式2014-12-01 05:30:15 如果我将两者都转换为小写,也会发生同样的情况。为什么会出现这种类型的不一致?

  • 问题内容: 我正在尝试使用这种格式来格式化当前时间。 输出: 有什么建议? 问题答案: 用 由于Go使用以下常量来格式化日期,请参阅此处

  • For %U, all days in a new year preceding the first Sunday are considered to be in week 0. For %W, all days in a new year preceding the first Monday are considered to be in week 0. In some implementati