2015-04-22 74 views
0

任何人都可以向我解释什么是错在此代码:SimpleDateFormat的解析时间和日期错分和秒

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'").parse("2015-04-22T19:54:11.827Z")); 

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'").parse("2015-04-22T19:54:11.0Z")); 

输出的说就是:

Wed Apr 22 20:07:47 GMT+02:00 2015 
Wed Apr 22 19:54:00 GMT+02:00 2015 

的时候有请注意以分钟为单位的差异毫秒输入时间。

回答

6

对于SimpleDateFormat,毫秒格式值包含大写S个字符,而不是小写s个字符(秒)。

s秒的分钟数55

小号毫秒数978

它解释827为秒,并增加了那些秒(847秒13分钟47秒),以你的价值。

以毫秒为单位使用SSS

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 

顺便说一句,你不需要重新创建不止一次如果是相同的SimpleDateFormat更多。您可以创建一次,将其保存到一个变量中,并多次呼叫parse,每个日期/时间字符串需要解析一次。

+0

重新创建SimpleDateFormat只是为了展示这个问题,除了你的答案是完美的:) –

1

使用大写SSS代替sss,因为s被解释为SimpleDateFormat中的秒数。因此,将您的代码更改为

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.827Z")); 

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.0Z")); 

这将为您完成这项工作。并且为了优化您的代码使用此

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
System.out.println(sdf.parse("2015-04-22T19:54:11.827Z")); 

System.out.println(sdf.parse("2015-04-22T19:54:11.0Z")); 

无需一次又一次地创建对象。只需创建一次并使用它来解析。