繁体   English   中英

经过时间格式HH:mm:ss

[英]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

一种替代方法是使用ISO 8601标准描述持续时间: PnYnMnDTnHnMnS ,其中P标记开始,而T则将年月日部分与时分秒部分分开。

java.time

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM