【发布时间】:2019-03-28 01:15:58
【问题描述】:
我有两种格式的时间字符串。
2019-03-01T22:22:50.591-08:00
2019-03-01T22:22:50.591Z
我正在使用下面的 Java sn-p 来解析
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:SS" +
".SSS'Z'", Locale.US);
Date date = df.parse(dateString);
它在第二个字符串上工作,但在第一个字符串上失败。有什么通用代码可以同时解析它们?
【问题讨论】:
-
ZonedDateTime.parse()。但我会让巴兹尔详细介绍。 -
不,它没有。
-
远离
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的Instant。您不需要显式格式化程序:OffsetDateTime.parse(dateString)适用于两个示例字符串。 -
-08:00和Z都是 UTC 偏移量。Z表示 UTC(零偏移量或“Zulu”)。所以这两个字符串实际上是相同的格式。它是国际标准 ISO 8601 格式。 -
@shmosel 不,不是
ZonedDateTime,你可以通过它,但它具有误导性,因为输入中只有一个与UTC(小时-分钟-秒)的偏移量,而不是时区 (Continent/Region)。最好是OffsetDateTime.parse( "2019-03-01T22:22:50.591-08:00" )。
标签: java timezone simpledateformat