2014-03-12 46 views
2

下面的代碼比我通過的時間少了一天,爲什麼它少於一天返回「Fri Aug 27 13:00:00 PDT 2010」。日期時間問題,少返回一天

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Locale; 
import java.util.TimeZone; 

    Locale locale = new Locale("en", "US"); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", locale); 
    TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT-4"); 

    dateFormat.setTimeZone(timeZone); 

    System.out.println(dateFormat.parse("2010-08-28")); 
+0

http://stackoverflow.com/questions/18122608/simpledateformat-parse-loses-timezone – ray

+0

此線程有同樣的問題。 http://stackoverflow.com/questions/17581112/java-simpledateformat-timezone-parsing – edubriguenti

回答

0

看看時間Fri Aug 27 13:00:00 PDT 2010?現在是美國太平洋時間13:00,所以我建議你使用目標時區的專用SimpleDateFormat打印...

4

奇怪輸出的原因是您的系統時區。

例如,我的系統上我與UTC+2工作,你的代碼打印

Fri Aug 27 23:00:00 BST 2010 

如果我更改系統時區UTC我得到

Fri Aug 27 21:00:00 BST 2010 

這提出了兩個小時的時差在輸出中。

那麼,什麼似乎發生的是,在UTC-4日期00:00, 28 Aug 2010計算到在系統設置中指定,然後在終端打印的時區。

+0

謝謝你的答案,但有什麼用解析時區的timeZone = TimeZone.getTimeZone(「ETC/GMT-時設置時區4" ); dateFormat.setTimeZone(timeZone); – user3157090

+0

查看我的更新回答。 –

+0

由於夏季時間2010年8月27日,它會打印21:00而不是20:00 – kai

1

輸出將取決於您的系統的時區。您所分析的內容基本上是GMT-4時區的2010-08-28 00:00:00。當你打印它時,它會顯示你的系統時區。