这是一个简单的问题,但我没有让它发挥作用。
我每秒递增一个变量,并以毫秒为单位在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());
}
答案 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标准方式来描述持续时间:PnYnMnDTnHnMnS
其中P
标记开头,T
分隔年 - 月 - 日从小时 - 分钟 - 秒部分开始。
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