2013-11-25 30 views
0

我解析格式的日期的工作:SimpleDateFormat的在IST時區而不是在JST時區

SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss Z yyyy"); 

當我這樣做,

String collectDate = "Sun Nov 24 13:00:07 IST 2013"; 
Date date = formatter.parse(collectDate); 

字符串被成功解析。

但是,當JST時區機器中運行相同的代碼並且日期爲「Sun Nov 24 13:00:07 JST 2013」時,這不起作用。

需要關於此的幫助。提前致謝。

+1

「不起作用」是什麼意思?例外?崩潰?掛?錯誤的結果? – Taylor

回答

0

Java在內部使用UTC(nee GMT)。當你顯示它時,你會得到那個時間點(但是從GMT+9的本地偏移量,例如Japan Standard Time)。

0

的Javadoc明確指出

SimpleDateFormat是一個用於格式化和語言環境敏感的方式分析日期的具體類。

而這正是它所做的,它僅用於解析和格式化Date對象。隱式java使用UTC時間來表示日期對象。如果您嘗試打印它,它會使用系統中設置的本地時區來格式化日期對象並將其打印到標準輸出。

您可以在處理JST格式的日期時遵循相同的步驟。以下是這樣做的代碼片段。

public static void main(String[] args) 
    { 

    SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss Z yyyy"); 


    String collectDate = "Sun Nov 24 13:00:07 JST 2013"; 
    try 
    { 
    Date date = formatter.parse(collectDate); 
    System.out.println(date); 
    formatter.setTimeZone(TimeZone.getTimeZone("JST")); 
    System.out.println(formatter.format(date)); 
    } 
    catch (ParseException e) 
    { 
    e.printStackTrace(); 
    } 

    } 

您可以清楚地看到第一個和第二個sysout之間的區別。

1

嗯。印度標準時間?以色列標準時間?愛爾蘭標準時間?所有這些都是IST的有效解釋。請參閱herehere

如果我說不出來,你如何期待計算機知道?

要保證的唯一縮寫是由RFC822定義的縮寫,它們是EST,CST,MST,PST,EDT,CDT,MDT,PDT,GMT,UT。即使那樣,你也應該避免使用它們。除了RFC822中定義的美國中部標準時間以外,CST有5種不同的解釋。

相反,您應該使用IANA時區標識符,例如Asia/KolkataAsia/Tokyo

相關問題