2014-01-20 22 views
0
dateFormatterLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
dateFormatterLocal.setTimeZone(TimeZone.getTimeZone("America/New York")); 
for (int i = 0; i < list.length; i++) { 
    timeStampArrayList.add(dateFormatterLocal.parse(list[i])); 
} 

我的當前代碼未將已知屬於UTC時區的時間戳轉換爲我的時區。轉換來自已知時區的時間戳到系統的時區

我也想知道如何獲得系統的當前時區,而不是在可能的情況下必須告訴它「美國/紐約」。

在此先感謝!

+0

我不知道我理解的問題(但有什麼新;))。如果您不想指定時區,那麼您需要以格式/「String」值包含時區。如果您無法更改原始值,則可以在分析它之前將時區值附加到「String」的末尾...... – MadProgrammer

回答

1

我不確定我是否完全理解您的問題,但這裏是我盡最大努力爲您解答。

我假設你有一個日期作爲UTC時區中的字符串,你希望日期作爲系統(或本地)時區。

要做到這一點,只需將字符串" UTC"添加到您的時間字符串,並將日期格式化程序模式更改爲「yyyy-MM-dd HH:mm:ss Z」。這裏ZRFC 822 time zone。您也可以使用z,這是General time zone

所以,你的代碼將變爲:然後

String timezoneOffset = " UTC"; 
dateFormatterLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 
dateFormatterLocal.setTimeZone(TimeZone.getTimeZone("America/New York")); 
for (int i = 0; i < list.length; i++) { 
    timeStampArrayList.add(dateFormatterLocal.parse(list[i] + timezoneOffset)); 
} 

這應該解析日期從提供的時區字符串轉換格式的時區。


你可以做到這一點,以獲得系統當前時區

TimeZone timeZone = Calendar.getInstance().getTimeZone(); 
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG)); 

這對我打印New Zealand Standard Time - 這是當前的時區。

您還可以更改TimeZone.LONGTimeZone.SHORT得到簡化版本即我得到NZST


你也應該閱讀this question and answer有關顯示日期