在 Java 中将秒数转换为 HH:MM(没有秒)
Convert number of seconds into HH:MM (without seconds) in Java
我知道您可以使用 DateUtils.formatElapsedTime(seconds)
将秒数转换为格式为 HH:MM:SS
的 String
。但是是否有任何实用函数可以让我执行相同的转换但没有秒数?
例如,我想将 3665
秒转换为 1:01
,即使它恰好是 1:01:05
。换句话说,只需删除秒部分。
强烈 更喜欢指向效用函数(如果存在的话)的答案而不是一堆自制算法。
根据可用信息,您似乎想要格式化基于持续时间的值。幸运的是,自 Java 8 以来,现在有一个新的 java.time
API,其中包括 Duration
class.
不幸的是,它(至少上次检查时)不支持它的格式化程序。
但是,您可以轻松地自己滚动...
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
.
现在我知道你会 "prefer" 实用方法,但你不太可能找到适合你 "every" 需要的东西,至少这给你一个起点。此外,您随时可以提出拉取请求 ;)
(当您使用 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
toMinutesPart
方法和其他 toXxxPart
方法是在 Java 9.
中引入的
使用 Apache Commons Lang
您可以使用 Apache 著名实用程序库 Commons Lang 的实用程序 class DateFormatUtils
,结合 TimeUnit 将秒数转换为毫秒数:
static String format(long durationSeconds) {
long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds);
// Commons lang:
return DurationFormatUtils.formatDuration(durationMillis, "HH:mm");
}
与输入一起使用 3665
它打印:
01:01
就我个人而言,我更愿意使用 Java8 或 Java9 标准库(请参阅其他答案),而不是引入依赖项只是为了使其成为 1 个方法调用。
我知道您可以使用 DateUtils.formatElapsedTime(seconds)
将秒数转换为格式为 HH:MM:SS
的 String
。但是是否有任何实用函数可以让我执行相同的转换但没有秒数?
例如,我想将 3665
秒转换为 1:01
,即使它恰好是 1:01:05
。换句话说,只需删除秒部分。
强烈 更喜欢指向效用函数(如果存在的话)的答案而不是一堆自制算法。
根据可用信息,您似乎想要格式化基于持续时间的值。幸运的是,自 Java 8 以来,现在有一个新的 java.time
API,其中包括 Duration
class.
不幸的是,它(至少上次检查时)不支持它的格式化程序。
但是,您可以轻松地自己滚动...
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
.
现在我知道你会 "prefer" 实用方法,但你不太可能找到适合你 "every" 需要的东西,至少这给你一个起点。此外,您随时可以提出拉取请求 ;)
int seconds = 3665;
Duration dur = Duration.ofSeconds(seconds);
String formatted = String.format("%d:%02d", dur.toHours(), dur.toMinutesPart());
System.out.println(formatted);
输出:
1:01
toMinutesPart
方法和其他 toXxxPart
方法是在 Java 9.
使用 Apache Commons Lang
您可以使用 Apache 著名实用程序库 Commons Lang 的实用程序 class DateFormatUtils
,结合 TimeUnit 将秒数转换为毫秒数:
static String format(long durationSeconds) {
long durationMillis = TimeUnit.SECONDS.toMillis(durationSeconds);
// Commons lang:
return DurationFormatUtils.formatDuration(durationMillis, "HH:mm");
}
与输入一起使用 3665
它打印:
01:01
就我个人而言,我更愿意使用 Java8 或 Java9 标准库(请参阅其他答案),而不是引入依赖项只是为了使其成为 1 个方法调用。