2015-06-18 118 views
2

我在Mac OSX 10.10.2上使用下面的代碼,它的行爲很奇怪。Mac上的Java DateFormat問題與Windows

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class StringToDate { 

    public static void main(String[] args) throws Exception { 
     String dateInString = "23/Oct/2015"; 
     DateFormat formatter = new SimpleDateFormat("dd/MMM/YYYY"); 
     Date date = formatter.parse(dateInString); 
     System.out.println(date); 
    } 
} 


輸出在Mac上:                  Sun Dec 28 00:00:00 CST 2014

輸出在Windows上:Fri Oct 23 00:00:00 CDT 2015


爲什麼在Mac輸出錯了嗎?

回答

3

Y是爲期一年。一年中使用y

DateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy"); 

此外,請確保DateFormat的區域設置是正確的。

編輯:

一個日期有精確到毫秒,所以如果你想納秒的精度,則不應使用日期和SimpleDateFormat的。

S是毫秒。由於您告訴SimpleDateFormat字符串的最後一部分是毫秒,因此它解析爲:545000000毫秒(即超過6天,這解釋了輸入和輸出之間的差異)。

要獲得精確的結果,以毫秒爲單位,刪除字符串的最後6個字符,並使用模式「dd-MMM-yyyy-HH.mm.ss.SSS」。

+0

爲什麼輸出在Windows上是正確的? – goncalotomas

+0

不知道。也許不是相同的JDK版本。 –

+1

據我所知,每年的年份應該與處理年份的開始/結束邊界的日期有所不同,但在這裏並不是這樣。所以,雖然我同意代碼應該使用「yyyy」,這是如何解釋結果? –