将 hh:mm:ss 转换为 mmm:ss
Convert hh:mm:ss to mmm:ss
我有一个 Java 函数可以将秒数转换为特定格式 (hh:mm:ss):
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d:%02d", TimeUnit.SECONDS.toHours(seconds),
TimeUnit.SECONDS.toMinutes(seconds) % TimeUnit.HOURS.toMinutes(1),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}
我的客户想要展示这个没有 "hour" 标签的计时器。示例:
- 如果
100 hours => 6000:00
- 如果
0 hours and 50 minutes => 50:00
- 如果
1 hour and 12 minutes and 30 seconds => 72:30
- 如果
10 hours and 5 minutes => 600:05
- 如果
0 hours, 0 minutes and 0 seconds => 00:00
我应该如何改变我的方法?
只需放弃小时位即可。
return String.format("%04d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
从格式中删除您的hours
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}
对于灵活的分钟数,您必须使用 %d
而不是 %02d
来指定您想要的数字,您的解决方案应如下所示:
return String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1)
);
例子
long[] times = {360000, 3000, 4350, 36300, 0};
for (long time : times) {
String result = String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(time),
TimeUnit.SECONDS.toSeconds(time) % TimeUnit.MINUTES.toSeconds(1));
System.out.println(String.format("%d : %s", time, result));
}
输出
360000 : 6000:00
3000 : 50:00
4350 : 72:30
36300 : 605:00
0 : 0:00
public static String formatChronometer(long seconds) {
Duration dur = Duration.ofSeconds(seconds);
return String.format("%02d:%02d", dur.toMinutes(), dur.toSecondsPart());
}
当我将 36005
输入此方法时,它返回 600:05
。
我认为你的计时器秒表示持续时间,时间量。经过的时间或倒计时的值。不是一天中的某个时间(您以 100 小时为例,但一天中的时间永远不会是 100 小时)。在那种情况下,我显然会使用 Duration
class 对其进行建模。这是最正确的做法。有些人使用自我记录这个词来描述考虑到这一点而编写的代码。
Duration.toSecondsPart
方法仅在 Java 9 中引入。如果您使用的是 Java 8(或 Java 6 或 7 与 ThreeTen Backport),请获取秒部分减去分钟然后转换为秒:
long minutes = dur.toMinutes();
dur = dur.minusMinutes(minutes);
return String.format("%02d:%02d", minutes, dur.toSeconds());
那么结果是一样的
PS 如果您的秒数改为表示一天中的时间,则正确的自我记录解决方案是使用 LocalTime
class:
LocalTime chrono = LocalTime.ofSecondOfDay(seconds);
return String.format("%02d:%02d",
chrono.get(ChronoField.MINUTE_OF_DAY), chrono.getSecond());
这将拒绝大于 86399
的秒值,但有一个例外,因为一天中的时间不能为 24:00
或更大。
我有一个 Java 函数可以将秒数转换为特定格式 (hh:mm:ss):
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d:%02d", TimeUnit.SECONDS.toHours(seconds),
TimeUnit.SECONDS.toMinutes(seconds) % TimeUnit.HOURS.toMinutes(1),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}
我的客户想要展示这个没有 "hour" 标签的计时器。示例:
- 如果
100 hours => 6000:00
- 如果
0 hours and 50 minutes => 50:00
- 如果
1 hour and 12 minutes and 30 seconds => 72:30
- 如果
10 hours and 5 minutes => 600:05
- 如果
0 hours, 0 minutes and 0 seconds => 00:00
我应该如何改变我的方法?
只需放弃小时位即可。
return String.format("%04d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
从格式中删除您的hours
public static String formatChronometer(long seconds) {
return String.format("%02d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1));
}
对于灵活的分钟数,您必须使用 %d
而不是 %02d
来指定您想要的数字,您的解决方案应如下所示:
return String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(seconds),
TimeUnit.SECONDS.toSeconds(seconds) % TimeUnit.MINUTES.toSeconds(1)
);
例子
long[] times = {360000, 3000, 4350, 36300, 0};
for (long time : times) {
String result = String.format("%d:%02d",
TimeUnit.SECONDS.toMinutes(time),
TimeUnit.SECONDS.toSeconds(time) % TimeUnit.MINUTES.toSeconds(1));
System.out.println(String.format("%d : %s", time, result));
}
输出
360000 : 6000:00
3000 : 50:00
4350 : 72:30
36300 : 605:00
0 : 0:00
public static String formatChronometer(long seconds) {
Duration dur = Duration.ofSeconds(seconds);
return String.format("%02d:%02d", dur.toMinutes(), dur.toSecondsPart());
}
当我将 36005
输入此方法时,它返回 600:05
。
我认为你的计时器秒表示持续时间,时间量。经过的时间或倒计时的值。不是一天中的某个时间(您以 100 小时为例,但一天中的时间永远不会是 100 小时)。在那种情况下,我显然会使用 Duration
class 对其进行建模。这是最正确的做法。有些人使用自我记录这个词来描述考虑到这一点而编写的代码。
Duration.toSecondsPart
方法仅在 Java 9 中引入。如果您使用的是 Java 8(或 Java 6 或 7 与 ThreeTen Backport),请获取秒部分减去分钟然后转换为秒:
long minutes = dur.toMinutes();
dur = dur.minusMinutes(minutes);
return String.format("%02d:%02d", minutes, dur.toSeconds());
那么结果是一样的
PS 如果您的秒数改为表示一天中的时间,则正确的自我记录解决方案是使用 LocalTime
class:
LocalTime chrono = LocalTime.ofSecondOfDay(seconds);
return String.format("%02d:%02d",
chrono.get(ChronoField.MINUTE_OF_DAY), chrono.getSecond());
这将拒绝大于 86399
的秒值,但有一个例外,因为一天中的时间不能为 24:00
或更大。