使用Java.time将字符串转换为Scala中的时间戳

时间:2018-10-29 07:07:44

标签: scala java-8 java.time

我正在尝试将以下字符串格式转换为时间戳

Mon Oct 29 14:33:09 MYT 20182018-10-29T14:33:09.756Z

这是我的代码

val format = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )
print(LocalDateTime.parse(approximateArrivalTimestamp.toString(), format).atZone(ZoneId.systemDefault()).toInstant().toString())

,输出为

2018-10-29T14:33:09Z

如何使时间戳达到2018-10-29T14:33:09.756Z之类的毫秒粒度

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

val dateString = "Mon Oct 29 14:33:09 MYT 2018"
val formatter = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )

val date = LocalDateTime.parse(dateString, formatter).atZone(ZoneId.systemDefault())

val formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")

date.format(formatter2)

出于某些奇怪的原因,您将其解释为LocalDateTime。我认为您应该使用ZonedDateTime来解析日期,然后将其转换为您的时区(它将正确转换您当地时区中的日期)。

val dateString = "Mon Oct 29 14:33:09 MYT 2018"
val formatter = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )

val date = ZonedDateTime.parse(dateString, formatter).withZoneSameInstant(ZoneId.systemDefault())

val formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")

date.format(formatter2)

如果您希望日期带有Z(Z表示时区为UTC),则必须将其转换为UTC。

val date2 = date.withZoneSameInstant(ZoneId.of("UTC"))

date2.format(formatter2)
// String = 2018-10-29T06:33:09.000Z