【问题标题】:Convert String to Timestamp in Scala using Java.time使用 Java.time 在 Scala 中将字符串转换为时间戳
【发布时间】:2018-10-29 07:07:44
【问题描述】:

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

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

非常感谢任何帮助。

【问题讨论】:

  • 如果输入中缺少毫秒详细信息,那么您将在转换中得到 0..

标签: scala java-8 java-time


【解决方案1】:
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

【讨论】:

  • 嘿,谢谢,我按照您的要求尝试了,但这就是我现在得到的2018-10-29T14:27:06.000+08
  • 这是因为您将日期解释为您的本地时区 +0800Z 表示的 UTC 相比。
猜你喜欢
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多