经过时间格式HH:mm:ss

时间:2015-11-07 11:11:47

标签: java date formatting gregorian-calendar

这是一个简单的问题,但我没有让它发挥作用。

我每秒递增一个变量,并以毫秒为单位在GregorianCalendar中设置它。

我正在使用这种格式HH:mmss来表示这段时间。

问题是小时开始显示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());
}

3 个答案:

答案 0 :(得分:0)

我认为原因是您将时区设置为GMT-1,但输出为utc。请尝试没有该时区,它应该工作。

答案 1 :(得分:0)

我终于明白了:

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

答案 2 :(得分: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项目扩展,并在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