2015-11-07 98 views
0

这是一个简单的问题,但我没有得到它的工作。已用时间格式HH:mm:ss

我每秒递增一个变量并将其设置在一个格里高利的日历中,以毫秒为单位。

而我正在使用这种格式HH:mmss来呈现elpased时间。

问题是,小时开始显示01而不是00.例如,1分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()); 
} 

回答

0

我终于明白了:

GregorianCalendar timeIntervalDone = new GregorianCalendar(); 
SimpleDateFormat dateTimeIntervalFormat = new SimpleDateFormat("HH:mm:ss"); 
dateTimeIntervalFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
+0

缺点:只适用于小于一天(24小时)的时间间隔。 –

0

我想原因是你的时区设置为GMT-1,但输出是UTC。请尝试没有时区,它应该工作。

+0

没有时区的结果是一样的。 – amp

+0

哦,对不起,我没有滚动到最后看到该评论。 –

0

你的做法是一个黑客,试图使用日期,时间瞬间类(GregorianCalendar)来表示时间跨度。再加上你的格式不明确,看起来像一个时间而不是持续时间。

ISO 8601

另一种方法是使用说明的持续时间的ISO 8601标准方式:PnYnMnDTnHnMnS其中P标志着开始和T年 - 月 - 日从时,分,第二部分部分分离。

java.time

在Java中8 java.time框架,后来取代了老java.util.Date/.Calendar类。旧的课程已被证明是麻烦的,混乱的和有缺陷的。避免它们。

的java.time框架由非常成功Joda-Time库的启发,通过JSR 310定义,由ThreeTen-Extra项目扩展,并在​​说明。

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

相关问题