我试图像以下时间一样显示每个时区的当前时间,但它不会按预期打印出时间。
long currentLong = System.currentTimeMillis();
TimeZone.setDefault(TimeZone.getTimeZone("EST"));
System.out.println("EST=="+ new java.util.Date(currentLong).toString());
TimeZone.setDefault(TimeZone.getTimeZone("CST"));
System.out.println("CST=="+ new java.util.Date(currentLong).toString());
TimeZone.setDefault(TimeZone.getTimeZone("MST"));
System.out.println("MST=="+ new java.util.Date(currentLong).toString());
TimeZone.setDefault(TimeZone.getTimeZone("PST"));
System.out.println("PST=="+ new java.util.Date(currentLong).toString());
TimeZone.setDefault(TimeZone.getTimeZone("AST"));
System.out.println("AKST=="+ new java.util.Date(currentLong).toString());
TimeZone.setDefault(TimeZone.getTimeZone("HST"));
System.out.println("HAST=="+ new java.util.Date(currentLong).toString());
执行程序时,我会得到这个:
EST==Sat Nov 03 22:24:02 EST 2012
CST==Sat Nov 03 22:24:02 CDT 2012
MST==Sat Nov 03 20:24:02 MST 2012
PST==Sat Nov 03 20:24:02 PDT 2012
AKST==Sat Nov 03 19:24:02 AKDT 2012
HAST==Sat Nov 03 17:24:02 HST 2012
我想知道为什么CST的时间与EST和MST和PST相同。
有人可以告诉我问题是什么?
谢谢。
不要使用TimeZone.setDefault()
,使用Calendar.getInstance(TimeZone tz)
和Calendar.setTimeZone()
。 Date
是非常弃用的, Calendar
要好得多。
问题是,您正在使用错误的类。当然,您绝不应该设置默认时区。
首先,默认时区是基础操作系统的时区。可以在桌面应用程序中使用它,但是它不会为您提供有效的Web应用程序。在Web应用程序中,最好询问用户他/她喜欢的时区是什么。
现在,如果要转换时区,它实际上很简单,但是您必须使用正确的类。正确的类是dateformat:
Date now = new Date();
// you need to detect locale somehow
// this way is valid with desktop applications only
Locale locale = Locale.getDefault(Locale.Category.FORMAT);
DateFormat df = DateFormat.getDateTimeInstance(
DateFormat.DEFAULT, DateFormat.DEFAULT, locale);
TimeZone est = TimeZone.getTimeZone("EST");
TimeZone mst = TimeZone.getTimeZone("MST");
df.setTimeZone(est);
System.out.println(df.format(now));
df.setTimeZone(mst);
System.out.println(df.format(now));
至于是否相同,您总是可以要求他们的平等:
System.out.println(est.equals(mst));
这些时区可能会有所不同,但是当前偏移量会相同。您可能会查询这种偏移的情况:
int estOffset = est.getOffset(now);