問題描述
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("America/New_York"));
try {
System.out.println(df.format(cal.getTime()));
System.out.println(df.parse(df.format(cal.getTime())));
} catch (ParseException e) {
e.printStackTrace();
}
結果如下:
2011-09-24 14:10:51 -0400
2011-09-24 14:10:51 -0400
2011 年 9 月 24 日星期六 20:10:51 CEST
Sat Sep 24 20:10:51 CEST 2011
為什么當我解析從 format() 獲得的日期時,它不遵守時區?
Why when I parse a date I get from format() it doesn't respect the timezone?
推薦答案
你正在打印調用 Date.toString()
,總是使用默認時區.基本上,您不應該將 Date.toString()
用于除調試以外的任何事情.
You're printing the result of calling Date.toString()
, which always uses the default time zone. Basically, you shouldn't use Date.toString()
for anything other than debugging.
不要忘記 Date
沒有時區 - 它代表時間的瞬間,以 Unix 紀元以來的毫秒數(1 月的午夜1970 UTC).
Don't forget that a Date
doesn't have a time zone - it represents an instant in time, measured as milliseconds since the Unix epoch (midnight on January 1st 1970 UTC).
如果您再次使用格式化程序格式化日期,那應該會得出與以前相同的答案.
If you format the date using your formatter again, that should come up with the same answer as before.
順便說一句,我建議使用 Joda Time 而不是 Date
/Calendar
如果你在 Java 中做大量的日期/時間工作;這是一個非常更好的 API.
As an aside, I would recommend the use of Joda Time instead of Date
/Calendar
if you're doing any significant amount of date/time work in Java; it's a much nicer API.
這篇關于Java DateFormat parse() 不尊重時區的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!