【发布时间】:2013-12-24 03:02:31
【问题描述】:
据我了解,java.util.Date 将日期存储为从 1970 年 1 月 1 日 00:00 开始的毫秒数...
所以,我尝试了以下代码:
public void testDateFormatBehavior()
{
DateFormat dfNoDay = new SimpleDateFormat(
"MMM d H:m:s zzz yyyy"
);
// This one should be correct as IST = GMT+5.30
String expStrDateBegIST1 = "Jan 01 05:30:01 IST 1970";
// Instead, this one seems to do the conversion to
// Jan 01 00:00:00 GMT 1970
String expStrDateBegIST2 = "Jan 01 02:00:01 IST 1970";
String expStrDateBegUTC = "Jan 01 00:00:01 GMT 1970";
String expStrDateBegCET = "Jan 01 01:00:00 CET 1970";
// Should convert to Jan 01 06:00:00 GMT 1970 as CST = GMT-6
String expStrDateBegCST = "Jan 01 00:00:00 CST 1970";
// This is EST, which is GMT+6...
String expStrDateBegEST = "Jan 01 10:00:00 EST 1970";
try {
Date dBegIST1 = dfNoDay.parse(expStrDateBegIST1);
Date dBegIST2 = dfNoDay.parse(expStrDateBegIST2);
Date dBegUTC = dfNoDay.parse(expStrDateBegUTC);
Date dBegCET = dfNoDay.parse(expStrDateBegCET);
Date dBegCST = dfNoDay.parse(expStrDateBegCST);
Date dBegEST = dfNoDay.parse(expStrDateBegEST);
System.out.println("IST1 milliseconds: " + dBegIST1.getTime());
System.out.println("IST2 milliseconds: " + dBegIST2.getTime());
System.out.println("UTC milliseconds: " + dBegUTC.getTime());
System.out.println("CET milliseconds: " + dBegCET.getTime());
System.out.println("CST milliseconds: " + dBegCST.getTime());
System.out.println("EST milliseconds: " + dBegEST.getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出:
IST1 milliseconds: 12601000
IST2 milliseconds: 1000
UTC milliseconds: 1000
CET milliseconds: 0
CST milliseconds: 21600000
EST milliseconds: 0
UTC 毫秒行是正确的,因为我们指定了从 1970 年 1 月 1 日开始的 00:00:01 秒。 CET 是正确的。 CST 是正确的,因为毫秒数是 1970 年 1 月 1 日之后的 6 小时。
但是,IST 转换很奇怪。
http://wwp.greenwichmeantime.com/to/ist/to-gmt/index.htm
IST 似乎是 GMT + 5:30。在我的 Java 代码中,它认为是 GMT + 2:00。
另外,EST 不正确。它认为 EST 是 GMT+10:00,而不是 GMT+6:00。 GMT+10:00 是美国东部标准时间,而不是美国东部标准时间。 http://wwp.greenwichmeantime.com/time-zone/australia/time-zones/eastern-standard-time/
是不是我做错了什么?
【问题讨论】: