2012-08-30 62 views
0

我已經寫了兩個函數的日期 - today()todayUTC() - 如:無法獲取UTC格式

public static Date today() { 
    Calendar cal = Calendar.getInstance(); 
    return cal.getTime(); 
} 

public static Date todayUTC() { 
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
    return cal.getTime(); 
} 

但是,當我使用打印的這些函數的結果:

public void todayTest() { 
    Date date1 = OOTBFunctions.today(); 
    System.out.println("today: "+date1); 

    Date dateUTC1 = OOTBFunctions.todayUTC(); 
    System.out.println("todayUTC: "+dateUTC1); 
} 

我看到這兩個語句打印相同的值,即

today: Thu Aug 30 14:48:56 PDT 2012 
todayUTC: Thu Aug 30 14:48:56 PDT 2012 

有人可以建議我失蹤什麼在UTC函數中,我獲得當地時區日期。

回答

3

Java在打印時使用默認的語言環境,這就是您看到這種行爲的原因。使用下面的代碼格式化並以您想要的語言環境/格式打印。記住

  • 當你創建一個Date對象時,它始終是UTC。
  • 在用戶的區域設置中顯示日期。
  • 以UTC格式存儲日期。

代碼

final SimpleDateFormat sdf = new SimpleDateFormat("the format you want"); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
final String utcTime = sdf.format(new Date()); 

你並不需要同時今日()和todayUTC()方法。保持和像下面一樣

public static Date nowInUTC() 
{ 
    return new Date(); 
} 

你不需要測試任何東西。

+0

實際上,我希望todayUTC()函數的返回類型是一個日期,如果我返回sdf.format(new Date()),我得到編譯器錯誤返回類型不匹配 –

+0

正如我所提到的,Date對象實際上以UTC表示。你很困惑,因爲你的sys out語句需要更正 –

+0

我很困惑我是否需要更改todayUTC()函數的代碼或todayTest函數中的代碼。 –

0

這兩種方法都會返回相同的值 - 一個Date對象不具有時區的任何概念(與Calendar不同)。 A Date只是表示即時時間,內部存儲爲UTC自1970年1月1日午夜以來的毫秒數。實際上,你有兩種方法,對等同:

return new Date(System.currentTimeMillis()); 

Date.toString()始終使用系統默認的時區。

如果要在某個時區保留日期/時間,請考慮使用Calendar。如果您想在時區中及時格式化特定時間,請使用設定時區的SimpleDateFormat

理想情況下,更改爲使用Joda Time而不是DateCalendar雖然 - 它是一個更清潔的API。

+0

#Jon Skeet你如何在1天內找到回答這麼多問題的時間。 (加上你的所有答案都是最好的)。你是社交的嗎?你喜歡你的生活嗎?(去酒吧,玩遊戲,和朋友出去玩,和GF /妻子一起享受時光,和孩子一起出去玩(如果有的話)? – Makky

+0

@Makky:我不去酒吧,但是,是的,我有時間陪伴我的家人...... –

+0

這樣更好,你是明星,我希望我可以花時間學習像你。 – Makky