【发布时间】:2013-01-05 12:01:45
【问题描述】:
我尝试使用 SimpleDateFormat 格式化时间间隔。
import java.text.*;
import java.util.*;
public class DateFormatTest {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
long interval = 1000;
System.out.println("Interval in millis: " + interval);
System.out.println("Expected result: 00:00:01");
System.out.println("Result using Date and SimpleDateFormat: " +
sdf.format(new Date(interval)));
}
}
我得到以下结果:
Interval in millis: 1000
Expected result: 00:00:01
Result using Date and SimpleDateFormat: 01:00:01
我在 GMT+1 时区。但它不应该反映在结果中。
当然可以用 System.out.printf 解决,但我要找的是原因。
【问题讨论】:
-
SimpleDateFormat 用于格式化日期,而不是间隔,因此它实际打印的是 GMT+1 纪元过去 1000 毫秒的正确时间。您应该将 SimpleDateFormat 的时区设置为 UTC
-
对于 24 小时日期格式,也使用“HH:mm:ss”,而不是“hh:mm:ss”。 hh 是一个带有有趣后果的错误。
-
System.out.printf 解决方案详细的地方有一个类似的问题:Timemillisecond to hh:mm:ss format in java