[英]java.util.Date returning different dates in JDK 5 and JDK 6
当与JDK5(1.5.0_09)运行时,以下代码
Fri May 03 00:00:00 GMT 3912
5/3/12 5:30 AM
并与JDK6(1.6.0_23)一起运行时
Fri May 03 00:00:00 IST 3912
5/3/12 12:00 AM
显然,差异是由于所使用的时区,然后创建了Date对象。 但这在JDK升级时是否会对现有代码造成问题? 是否在某处记录了此行为,或者我缺少某些东西?
class TimeTest {
public static void main(String[] args) {
Date d = new Date(2012, 04, 3);
Locale l = new Locale("en", "US","");
DateFormat df= DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, l );
TimeZone t = TimeZone.getTimeZone("Asia/Calcutta");
df.setTimeZone(t);
System.out.println(d);
System.out.println(df.format(d));
}
}
出现奇怪的年份3192
是因为不推荐使用的 Date
构造函数假定您使用的是2位数的年份,而0
表示1900
。 它将1900
添加到年份中。
时区的差异不是Date
构造函数的错误。 您的代码使用TimeZone.getTimeZone("Asia/Calcutta")
获取时区。 如果该方法无法识别时区字符串,则记录为返回GMT时区。 看起来Sun ADDED在Java 1.6中支持更多时区。 (大多数人认为这是一件好事,而不是可移植性问题。)
我还没有尝试过,但是当您的请求区域ID无法识别时,以下内容足以防止使用GMT。
public TimeZone getZone(String id) {
TimeZone tz = TimeZone.getTimeZone();
if (!tz.getID().equals(id)) {
throw new IllegalArgumentException("unrecognized zone " + id);
}
return tz;
}
总而言之,您的代码在两个方面被打破:
getTimeZone
将理解您所有的时区字符串,而Java 1.5显然不是这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.