![](/img/trans.png)
[英]How to format an elapsed time interval in hh:mm:ss.SSS format in Java?
[英]Elapsed time format HH:mm:ss
这是一个简单的问题,但我无法使其正常工作。
我每秒增加一个变量,并以毫秒为单位将其设置在GregorianCalendar中。
我正在使用这种格式HH:mmss
来表示提前时间。
问题是小时开始显示01而不是00。例如,在1分35秒之后,显示的是: 01:01:35
: 01:01:35
: 01:01:35
而不是00:01:35
。
问题可能出在哪里?
有重要的代码:
GregorianCalendar timeIntervalDone = new GregorianCalendar(TimeZone.getTimeZone("GMT-1")); //initially I didn't have the TimeZone set, but no difference
SimpleDateFormat dateTimeIntervalFormat = new SimpleDateFormat("HH:mm:ss");
public String getTimeIntervalDoneAsString() {
timeIntervalDone.setTimeInMillis(mTimeIntervalDone); //mTimeIntervalDone is the counter: 3seccond -> mTimeIntervalDone = 3000
return dateTimeIntervalFormat.format(timeIntervalDone.getTime());
}
我认为原因是您将时区设置为GMT-1,但输出是utc。 请在没有该时区的情况下尝试它,它应该可以工作。
我终于明白了:
GregorianCalendar timeIntervalDone = new GregorianCalendar();
SimpleDateFormat dateTimeIntervalFormat = new SimpleDateFormat("HH:mm:ss");
dateTimeIntervalFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
您的方法是破解,试图使用日期时间矩类( GregorianCalendar
)来表示时间跨度。 另外,您的格式是模棱两可的,看起来像是一天中的时间而不是持续时间。
一种替代方法是使用ISO 8601标准描述持续时间: PnYnMnDTnHnMnS
,其中P
标记开始,而T
则将年月日部分与时分秒部分分开。
Java 8和更高版本中的java.time框架取代了旧的java.util.Date/.Calendar类。 老类被证明是麻烦,混乱和有缺陷的。 避免他们。
java.time框架的灵感来自于JSR 310定义的,由ThreeTen-Extra项目扩展的,非常成功的Joda-Time库,并在Tutorial中进行了说明。
java.time框架确实使用ISO 8601作为其默认值,否则,这套极好的类集缺少一个类来表示整年的年月日天小时分钟数秒。 相反,它将概念分为两部分。 Period
类处理年-月-天,而Duration
类则处理小时-分钟-秒。
Instant now = Instant.now ();
Instant later = now.plusSeconds ( 60 + 35 ); // One minute and 35 seconds later.
Duration duration = Duration.between ( now , later );
String output = duration.toString ();
转储到控制台。
System.out.println ( "output: " + output );
输出:PT1M35S
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.