基本上我的日期字符串是ISO-8601日期字符串,所以我搜索将ISO-8601日期字符串转换为日期,但解决方案很长。以下是详细信息。
我有一个字符串2018-02-02T06:54:57.744Z想要将它转换为日期,但我得到了错误:
java.text.ParseException: Unparseable date: "2018-02-02T06:54:57.744Z"我正在使用以下技术来做到这一点,但没有成功:
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
parser.setTimeZone(TimeZone.getTimeZone("UTC"));
Date parsed = parser.parse(utcDateString);
return parsed;我还在SimpleDateFormat中使用了以下模式,但没有成功:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
yyyy-MM-dd HH:mm:ss.S
yyyy-MM-dd'T'HH:mm:ssX
yyyy-MM-dd'T'HH:mm'Z'这个问题的任何解决方案。
发布于 2018-02-03 16:08:40
tl;dr
Instant.parse( “2018-02-02T06:54:57.744Z” ) java.time
现代方法使用java.time类。
Instant是java.util.Date的替代品,用协调世界时表示时间线上的某个时刻。
您的输入字符串恰好符合ISO 8601标准。在解析/生成字符串时,java.time类默认使用标准格式。所以不需要指定格式化模式。
Instant instant = Instant.parse( “2018-02-02T06:54:57.744Z” ) ;最好完全避免麻烦的java.util.Date类。但是如果你坚持,可以使用添加到旧类中的新方法进行转换。
Date d = Date.from( instant ) ;关于早期的Android,参见ThreeTen-Backport和ThreeTenABP项目。
关于java.time
框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
现在在maintenance mode中的项目建议迁移到java.time类。
要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310。
从哪里获取java.time类?
中的
https://stackoverflow.com/questions/48594916
复制相似问题