2013-10-13 144 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