任何人都可以向我解释这段代码中的错误:
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"));
Out put是:
Wed Apr 22 20:07:47 GMT+02:00 2015
Wed Apr 22 19:54:00 GMT+02:00 2015
请注意输入时间中有毫秒的分钟差异。
答案 0 :(得分:6)
对于SimpleDateFormat
,毫秒格式值包含大写S
个字符,而不是小写的s
个字符。
秒数第55号
毫秒数978
它将827
解释为秒,并将这些秒(847秒为13分47秒)添加到您的值中。
使用SSS
毫秒。
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
顺便说一下,如果它是相同的,您不需要多次重新创建SimpleDateFormat
。您可以创建一次,将其保存到变量,并多次调用parse
,每次为您要解析的每个日期/时间字符串调用一次。
答案 1 :(得分: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"));
无需一次又一次地创建对象。只需创建一次并使用它来解析。