2016-01-21 59 views
-1

我試圖創建一個日期對象,其時間代表不同時區中的日期時間。可能嗎?我試過這個。有人可以請解釋這裏有什麼問題。具有不同時區日期的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 
+0

如果使用Java 8然後尋找到新的日期+時間API解決這個問題。 –

+0

@ThorbjørnRavnAndersen我在Java 7 – dRv

+4

*有人可以請解釋這裏有什麼問題*:沒有什麼是錯的。你預期會發生什麼?日期只是幾毫秒的包裝。它沒有任何時區。 –

回答

1

試試這個:

Date date = Calendar.getInstance().getTime(); 
SimpleDateFormat sdfAmerica = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a"); 
sdfAmerica.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
String sDateInAmerica = sdfAmerica.format(date); 
+1

您正在將日期格式化爲不同的時區,我準備好了,我想要一個日期對象 – dRv

+0

不能是日曆對象嗎? – Odravison

0

日期用來存儲UTC時間(見docs)。如果您想要有時間用於不同的時區並且您不想格式化,則建議使用Calendar對象(請參閱docs)。

對於您作爲Java 7開發人員:通常,我推薦使用Calendar對象而不是Date對象,因爲操作更簡單(例如添加時間)和更直觀的API。

0

您可以通過以下方式

SimpleDateFormat sdfAmerica = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a"); 
sdfAmerica.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
Date newDate = sdfAmerica.parse(sdfAmerica.format(Calendar.getInstance().getTime())); 
相關問題