Java的时间格式化
问题描述:
我有方法Java的时间格式化
public static void testDateFormat() throws ParseException {
DateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
Date hora;
hora=dateFormat.parse("00:00:01");
System.out.println(hora.getHours()+" "+hora.getMinutes());
System.out.println("Date "+hora);
System.out.println("Seconds "+TimeUnit.MILLISECONDS.toSeconds(hora.getTime()));
}
输出是
0 0
Date Thu Jan 01 00:00:01 COT 1970
Seconds 18001
为什么秒数为18001?我预计会得到1秒。
答
因为你的Date
有一个不是UTC的TimeZone
。实际上,这是UTC-5,即COT。而5 * 60 * 60是18000(或者你的结果,再加上一秒)。为了得到你所期望的价值,你可以调用DateFormat#setTimeZone(TimeZone)
一样,
DateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // <-- Add this.
Date hora=dateFormat.parse("00:00:01");
System.out.println(hora.getHours()+" "+hora.getMinutes());
System.out.println("Date "+hora);
System.out.println("Seconds "+TimeUnit.MILLISECONDS.toSeconds(hora.getTime()));
输出是如您所愿。
编辑 正如在评论中指出,Date#getTime()
每的Javadoc
返回自1970年1月1日,该
Date
对象表示00:00:00 GMT毫秒数。
和你的
Thu Jan 01 00:00:01 COT 1970
Date
相当于
Thu Jan 01 00:05:01 UTC 1970
,因此你会得到5个小时的时差。
而你应该提到的重要细节是'Date'的getTime()'方法返回自从'00:00:00 1/1/1970 UTC'以来的毫秒数 - 这当然是'19:00:00 31/12/1969 COT'。 – 2014-10-16 23:26:25
@DavidWallace编辑。更好? – 2014-10-16 23:42:10
是的。有一个upvote。 – 2014-10-17 00:11:52