【发布时间】:2018-06-23 21:54:12
【问题描述】:
我想将我的时间戳转换为 XXhours:YYminutes 字符串。我的方法有时会正常工作,除非它获得更大的价值。例如,
193500000 -> 05hours:45minutes(错误,正确的是 53hours:45minutes)
60300000 -> 16 小时:45 分钟(正确)
63900000 -> 17 小时:45 分钟(正确)
108000000-> 06hours:00minutes(错误,正确的是 30hours:00minutes)
117000000 -> 08hours:30minutes(错误,正确的是 32hours:30minutes)
SimpleDateFormat dateFormat = new SimpleDateFormat("HH'hours' mm'minutes'");
dateFormat.setTimeZone( TimeZone.getTimeZone( "GMT"));
String string = dateFormat.format(totalTime);
【问题讨论】:
-
在 Java 中日期不是小时计数器。
-
您正在尝试使用输出日期的函数来输出持续时间。这是完全不支持的; Java就在这里,你错了。一天只有 24 小时,所以 HH 永远不会超过 24 小时。 193500000 是 1970 年的第三天,格林威治标准时间凌晨 05:45。
-
我现在明白了:/我没想到
-
顺便说一句,即使对于正确/受支持的用途,我建议您不要使用早已过时且臭名昭著的麻烦
SimpleDateFormat类。java.time, the modern Java date and time API, 使用起来更好。此外还包括一个专门为您的目的而制作的Duration类(尽管不幸的是它不适合格式化)。 -
Stack Overflow 上已经有很多答案可能会有所帮助,例如this one。
标签: java simpledateformat duration milliseconds gmt