日期时间解析错误
我在Java中解析日期时遇到问题。 以下是代码。
String dateString = "2017-12-13T16:49:20.730555904Z"; List formatStrings = Arrays.asList("yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'"); for (String formatString : formatStrings) { try { SimpleDateFormat formatter = new SimpleDateFormat(formatString); formatter.setTimeZone(TimeZone.getTimeZone("UTC")); Date d = formatter.parse(dateString); System.out.println("Format is:" + formatString); System.out.println("Orignal Date: " + d); System.out.println("Orignal MS: " + d.getTime()); return d; } catch (ParseException e) {} } return null; }
当我运行这个程序时,我得到以下输出。
Format is:yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z' Orignal Date: Fri Dec 22 03:45:15 UTC 2017 Orignal MS: 1513914315904
我不知道为什么它会在12月22日给我12 月13日 。 但是,如果我将输入日期更改为此。
String dateString = "2017-12-13T16:49:20.7Z";
即在Z之前只有一个字符。然后我得到正确的输出。
Format is:yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z' Orignal Date: Wed Dec 13 16:49:20 UTC 2017 Orignal MS: 1513183760007
它给了我正确的输出,直到Z之前的3个数字。如果超过3个数字比我得到错误的输出。
如果有人能指出我在这里缺少的东西,那就太好了。
PS:我在android中解析这些日期。 我已将min API级别设置为16,并且对于低于26的API级别,java.time不可用。
SimpleDateFormat
中的S
指定了毫秒数,而不是几分之一秒。 您已指定730555904毫秒,即约8.45天 – 因此日期更改。
java.util.Date
只有毫秒的精度。 我建议使用java.time
包,它的精度为纳秒,就像输入一样。 使用DateTimeFormatter
进行解析。 请注意,在DateTimeFormatter
, S
说明符是一秒的小数。
更好的是, Instant.parse
使用正确的格式:
import java.time.*; public class Test { public static void main(String... args) throws Exception { String text = "2017-12-13T16:49:20.730555904Z"; Instant instant = Instant.parse(text); System.out.println(instant); } }
- 使用android.content.Context.checkPermission检查权限时出现空指针exception
- 将SQLite数据库中的数据显示到Android中的ListView中
- 检查Android中的Typeface对象的系列
- 从WiFi连接切换到3g导致连接挂起?
- SimpleXML无缘无故地抛出XmlPullParserException,未终止的实体ref
- 如何在LatLng的国家语言中获得Geocoder的结果?
- 使用Cordova 3.1 CLI构建Android应用程序时出错
- 怎么能修复这个错误? “java.lang.IndexOutOfBoundsException”
- 获取ListItem中的信息并将其发送到下一个Activity