我試圖創建一個日期對象,其時間代表不同時區中的日期時間。可能嗎?我試過這個。有人可以請解釋這裏有什麼問題。具有不同時區日期的java.Util.Date對象
public static void test3() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date d1 = calendar.getTime();
System.out.println("d1= " + d1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a z");
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String dateInString = sdf.format(calendar.getTime());
System.out.println("dateInString= " + dateInString);
try {
Date d2 = sdf.parse(dateInString);
System.out.println("d2= " + d2);
}
catch (ParseException e) {
e.printStackTrace();
}
}
輸出:
d1= Thu Jan 21 17:26:20 IST 2016
dateInString= Jan 21, 2016 06:56:20 AM EST
d2= Thu Jan 21 17:26:20 IST 2016
UPDATE:
如果我不對時區的關心和需要的只是時間,我有表演一個Date對象錯誤時區的時間。使用SDF
的新實例public static void test3() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date d1 = calendar.getTime();
System.out.println("d1= " + d1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
SimpleDateFormat sdf2 = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String dateInString = sdf.format(calendar.getTime());
System.out.println("dateInString= " + dateInString);
try {
Date d2 = sdf2.parse(dateInString);
System.out.println("d2= " + d2);
}
catch (ParseException e) {
e.printStackTrace();
}
}
輸出:
d1= Thu Jan 21 18:36:51 IST 2016
dateInString= Jan 21, 2016 08:06:51 AM
d2= Thu Jan 21 08:06:51 IST 2016
enter code here
如果使用Java 8然後尋找到新的日期+時間API解決這個問題。 –
@ThorbjørnRavnAndersen我在Java 7 – dRv
*有人可以請解釋這裏有什麼問題*:沒有什麼是錯的。你預期會發生什麼?日期只是幾毫秒的包裝。它沒有任何時區。 –