2013-10-13 195 views
0

,我有以下日期格式我需要解析:日期格式

Aug 6, 2013 18:34:16.990423000 

所以我試過如下:

Date startTime; 
SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.S", Locale.ENGLISH); 
startTime = df.parse("Aug 6, 2013 18:34:16.990423000"); 

但隨後mydate.toString讓我徹底其他日期!

它給我"Sun Aug 11 11:27:43 IDT 2013"

它與時區有關嗎?

順便說一句,當我執行

ts = returnTime.getTime() - startTime.getTime(); 

它似乎返回正確的答案。但我不確定它總是如此。

回答

2

問題出在S表示毫秒。它將該毫秒數添加到日期,但是您有990423000毫秒。你可能想先離開了您的格式的.S或截斷你的輸入,如下面的例子:

所有的
Date startTime; 
String dateString = "Aug 6, 2013 18:34:16.990423000"; 
SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.SSS", Locale.ENGLISH); 
startTime = df.parse(dateString.replaceFirst("\\.(\\d{3})\\d*$", ".$1")); 
System.out.println(new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.SSS").format(startTime)); 
+0

首先,非常感謝。這個reg exp解決方案對我來說確實是一些先進的東西。但是,它有效地工作。我仍然不明白格式化有什麼問題?我是否必須在毫秒內只留下3位數字?這是問題嗎?因爲我猜這就像我看到的其他例子。 – dushkin

+0

是毫秒只能是3位數。 'SimpleDateFormat.parse'在存在時會佔用更多的數字,但會將它們解釋爲完整毫秒 - 而不是納秒。 – halfbit