2010-11-09 97 views
2

我需要創建一個具有澳大利亞時區的java.util.Date對象。這個對象是在下游組件中使用的標籤庫所必需的(所以我被Date卡住了)。將日曆轉換爲java.util.Date的問題

這是我嘗試:

TimeZone timeZone = TimeZone.getTimeZone("Australia/Sydney"); 
GregorianCalendar defaultDate = new GregorianCalendar(timeZone); 
Date date = defaultDate.getTime(); 

然而, 「日期」 總是返回當前的本地時間(在我的情況,ET)。我在這裏做錯了什麼?是否有可能使用不同的時區設置Date對象?

更新:

感謝您的迴應!如果我想輸出格式化的日期作爲字符串,但這不工作,如果我想返回一個日期對象。例如:

Date d = new Date(); 
DateFormat df = new SimpleDateFormat(); 
df.setTimeZone(TimeZone.getTimeZone("Australia/Sydney")); 

String formattedDate = df.format(d); // returns Sydney date/time 
Date myDate = df.parse(formattedDate); // returns local time(ET) 

我想我最終將會重新調整我們最新的taglib。

+0

[如何使用Java來處理日曆時區?(http://stackoverflow.com/questions/230126/how-to-handle-calendar-timezones-using-java) – duffymo 2010-11-09 02:17:01

回答

4

它甚至可以設置一個不同的時區的日期對象?

不,這是不可能的。如其javadoc所述,所有java.util.Date包含的僅僅是相對於UTC/GMT1970年1月1日的時間量的歷元時間。 Date不包含其他信息。要使用時區格式化,請使用SimpleDateFormat#setTimeZone()

+0

呀,日期可能重複讓很多人陷入麻煩,因爲它實際上只是一個時間戳。每當你處理像你這樣的日子,或者我會想到他們,你真的在​​尋找使用某種日曆的味道。 – CurtainDog 2010-11-09 04:02:48

1

getTime是一個以秒爲單位的Unix時間,它沒有時區,即它綁定到UTC。您需要將該時間轉換爲您想要的時區e.b.通過使用DateFormat。

import java.util.*; 
import java.text.*; 

public class TzPrb { 
    public static void main(String[] args) { 
     Date d = new Date(); 
     System.out.println(d); 

     DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     df.setTimeZone(TimeZone.getTimeZone("Australia/Sydney")); 
     System.out.println(df.format(d)); 
     df.setTimeZone(TimeZone.getTimeZone("Europe/London")); 
     System.out.println(df.format(d)); 
    } 
}