在Java中将秒数转换为HH:MM(无秒)

时间:2018-04-30 07:46:45

标签: java datetime time datetime-format java-time

我知道您可以使用DateUtils.formatElapsedTime(seconds)将数秒转换为格式为String的{​​{1}}。但有没有任何实用功能可以让我执行相同的转换,但没有秒?

例如,我想将HH:MM:SS秒转换为3665,即使它恰好是1:01。换句话说,只需删除秒部分。

强烈会更喜欢指向效用函数(如果存在)的答案而不是一堆本地滚动算法。

3 个答案:

答案 0 :(得分:3)

MadProgrammer has already provided a good Java 8 answer(当你使用ThreeTen Backport时,它也适用于Java 6和7)。在Java 9中,仍然可以在库中进行更多的计算:

    int seconds = 3665;
    Duration dur = Duration.ofSeconds(seconds);
    String formatted = String.format("%d:%02d", dur.toHours(), dur.toMinutesPart());
    System.out.println(formatted);

输出:

  

1:01

Java 9中引入了toMinutesPart方法和其他toXxxPart方法。

答案 1 :(得分:2)

根据可用信息,您似乎想要格式化基于持续时间的值。幸运的是,自Java 8以来,现在有了一个新的java.time API,其中包含Duration类。

不幸的是,它(至少在最后一次检查时)不支持格式化程序。

但是,你可以轻松推出自己的......

protected static String format(Duration duration) {
    long hours = duration.toHours();
    long mins = duration.minusHours(hours).toMinutes();
    return String.format("%02d:%02d", hours, mins);
}

当与...类似的东西使用时。

System.out.println(format(Duration.ofSeconds(3665)));

打印出01:01

现在我知道你“更喜欢”实用工具方法,但你不太可能找到适合你“每个”需求的东西,这至少给你一个起点。此外,你总是可以提出拉动请求;)

答案 2 :(得分:2)

使用Apache Commons Lang

您可以使用Apache着名的实用程序库DateFormatUtils的实用程序类Commons Lang,并结合TimeUnit将秒转换为毫秒:

def m1(s: AnyRef): Unit

使用输入static String format(long durationSeconds) { long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds); // Commons lang: return DurationFormatUtils.formatDuration(durationMillis, "HH:mm"); } 打印:

  

01:01

就我个人而言,我更喜欢使用Java8或Java9标准库(参见其他答案),而不是仅仅为了使它成为1方法调用而引入依赖。