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 

请注意输入时间中有毫秒的分钟差异。

对于SimpleDateFormat ,毫秒格式值包含大写字母S字符,而不是小写字母秒数。

秒数第55号

S毫秒数978

它将827解释为秒,并将这些秒(847秒为13分47秒)添加到您的值。

使用SSS几毫秒。

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

另外,如果它是相同的,您不需要多次重新创建SimpleDateFormat 。 您可以创建一次,将其保存到变量,并多次调用parse ,对于您要解析的每个日期/时间字符串。

使用大写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")); 

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

 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")); 

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