2015-11-04 42 views
0
public static void main(String[] args) throws ParseException { 
    SimpleDateFormat dt = new SimpleDateFormat("MM dd yy"); 
    dt.setLenient(false); 
    dt.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
    Date date = dt.parse("05 14 16"); 
    System.out.println(date); 
} 

輸出:Fri May 13 21:30:00 IST 2016SimpleDateFormat的解析沒有履行時區

,如果我嘗試使用輸出它切換到一天之前,而不是正確的日期。

這個預期或與API的問題嗎?

+0

我不知道,但是你可能需要打印,以及時指定的時區。 – Teepeemm

回答

3

這是預期並沒有在Java中沒有錯誤。

Date不包含時區信息。一個java.util.Date是因爲01-01-1970 00:00:00 GMT無非包裝更多的毫秒數。它不記得它解析的字符串包含有關時區的信息。

當您通過(隱含的)調用它toString()顯示Date,例如,你在這裏做:

System.out.println(date); 

它會在你的系統,這是IST在默認的時區進行打印您的案件。

如果要在特定時區打印,請使用SimpleDateFormat對象對其進行格式化,然後在SimpleDateFormat對象上設置所需的時區。例如:

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z"); 
df..setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
System.out.println(df.format(date));