[英]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.