2012-07-31 126 views
2

我正在使用桌面應用程序。這會得到輸入作爲從具有用戶內容的文本文件是這樣的:Java在運行時設置時區

.................................. 
.................................. 

Mon Jul 9 14:41:07 MDT 2012 
.................................. 
.................................. 
.................................. 

我使用這個信息,並使用JFreeChart的圖書館創建一個時間序列圖。 時區可以是世界上任何可用的。但是,當我使用這個文件它的默認時區是sytem的時區(IST),所以不顯示MDT時間。當我試圖從日期捕獲時區,然後使用

TimeZone.setDefault(TimeZone.getTimeZone("MDT")); 

它沒有工作。任何人都可以請告訴我如何更改Java中的默認時區,當我有像MDT,CDT等時區的縮寫... ...

回答

0

謝謝你們。感謝您的快速回復。 @vikas你的迴應證明更有用。我使用下面的代碼,它運行良好。

String timezoneLongName = ""; 

String fileTimeZone  = "MDT"; //timezone could be anything, getting from file. 

Date date   = new Date(); 
String TimeZoneIds[] = TimeZone.getAvailableIDs(); 

for (int i = 0; i < TimeZoneIds.length; i++) { 

    TimeZone tz = TimeZone.getTimeZone(TimeZoneIds[i]); 
    String tzName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT); 

    if(fileTimeZone.equals(tzName)){ 
     timezoneLongName = TimeZoneIds[i]; 
     break; 
    } 
} 

if(timezoneLongName != null && !timezoneLongName.isEmpty() && !timezoneLongName.trim().isEmpty() && timezoneLongName.length() != 0){ 
    TimeZone.setDefault(TimeZone.getTimeZone(timezoneLongName)); 
} 

儘管「MDT」時區有多個條目,但它在第一次匹配時自己解決了我的問題,沒有任何問題。我在CDT,MDT和CDT時區測試了代碼,它工作得很好。謝謝!

1

使用Calendar類中的setTimeZone(...)方法。

+0

我試圖與下面的代碼 日曆日曆=新的GregorianCalendar(); calendar.setTimeZone(TimeZone.getTimeZone(fileTimeZone)); 但沒有奏效。 – dirtyhandsphp 2012-07-31 11:41:56

3

Theres沒有時區叫做MDT,它是MST7MDT。用途:

TimeZone.setDefault(TimeZone.getTimeZone("MST7MDT")); 

另見Java's java.util.TimeZone

+0

工作對我來說,當你設置時區的所有日期,日曆實例自動重新計算時區 – deFreitas 2016-09-22 17:09:29

3

MDT沒有時區鍵,它是時區的簡短顯示名稱,所以TimeZone.getTimeZone(「MDT」)將返回這是GMT的默認時區。 Mountain Time的關鍵是MST,MST7MDT等。因此,您需要確定時區的關鍵。請注意,對於相同的短顯示名稱,有許多不同的鍵,例如對於MDT shortName,有US/Mountain,美國/亞利桑那州,SystemV/MST7MDT,納瓦霍,墨西哥/ BajaSur,MST7MDT和MST的密鑰。

+0

你是對的。它現在將我的默認時區返回爲GMT。 – dirtyhandsphp 2012-07-31 11:42:55

+0

謝謝兄弟....你的提示解決了我的問題。 – dirtyhandsphp 2012-07-31 11:58:58