SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss`ZZ:ZZ`");
sdf.parse("2020-12-16T16:27:57+00:00");
我不确定日期是什么,但我很肯定是yyyy mm dd't'hh:mm:ss ZZ:ZZ
或者类似的。我在猜z是从哪里来的https://help.sumologic.com/03send-data/sources/04reference-information-for-sources/timestamps%2c-time-zones%2c-time-ranges%2c-and-date-formats
正确的格式是什么?如何将其转换为ms?
我也试过了
Instant instant = Instant.parse("2020-12-16T16:27:57+00:00");
我从minecraft的json文件中获取它。我拒绝使用joda时间,因为minecraft最初是用java5编写的,没有使用joda时间。他们后来更新到Java7
3条答案
按热度按时间cvxl0en21#
我想出来了
vwoqyblh2#
java.time文件
api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
使用现代日期时间api:
由于日期时间字符串符合iso-8601格式,因此可以直接解析它(即不使用
DateTimeFormatter
)至OffsetDateTime
.输出:
你的答案怎么了?
使用
ZZ:ZZ
而不是一个X
:查看文档以了解更多信息。另外,我不确定你们是否已附上ZZ:ZZ
在引号中,用于格式化代码,只是为了突出显示它作为一个代码,或者您已经在实际代码中这样做了。千万不要把Z
单引号内;否则,就意味着Z
作为字符文本而不是时区。检查这个答案以便更好地理解它。虽然这不是强制的解析,但您永远不应该使用
SimpleDateFormat
或者DateTimeFormatter
没有一个Locale
. 检查这个答案以便更好地理解它。使用旧api:
输出:
请注意
java.util.Date
对象不是像现代日期时间类型那样的实时日期时间对象;相反,它表示自称为“epoch”的标准基准时间以来的毫秒数,即January 1, 1970, 00:00:00 GMT
(或utc)。打印对象时java.util.Date
,其toString
方法返回jvm时区中的日期时间,该值是从该毫秒值计算出来的。如果需要在不同的时区打印日期时间,则需要将时区设置为SimpleDateFormat
并从中获取格式化字符串。nwwlzxa73#
从不使用
SimpleDateFormat
或者其他几年前被现代java.time类取代的糟糕的日期时间类。在解析/生成表示日期时间值的字符串时,java.time类默认使用标准iso8601格式。您的输入是这些标准格式之一。所以不需要指定格式化模式。
关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
java.util.Date
,Calendar
, &SimpleDateFormat
.要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
现在处于维护模式的joda time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线
java.sql.*
班级。hibernate5和jpa2.2支持java.time。从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9带来了一些小的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android(26+)的更高版本捆绑了java.time类的实现。
对于早期的android(<26),一个称为api desugaring的过程带来了java.time功能的一个子集,这些功能最初没有内置到android中。
如果desugaring不能提供您所需要的,那么threetenabp项目将threeten backport(如上所述)改编为android。了解如何使用threetenabp…。