如何在Java 8(Scala)中将日期时间字符串转换为长(UNIX纪元时间)毫秒

sam*_*est 1 java datetime scala epoch java-8

这个问题解决了几秒钟的情况:如何在Java 8(Scala)中将日期时间字符串转换为long(UNIX Epoch Time)

但是,如果我想要毫秒,似乎必须使用

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
    LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
      .atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
      .toInstant().toEpochMilli
Run Code Online (Sandbox Code Playgroud)

这对于我在另一个问题中详细介绍的4个问题是很丑陋的(我不喜欢的主要内容是魔术文字"UTC"和魔术数字0)。

不幸的是以下内容无法编译

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
     LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
                  .toEpochMilliSecond(ZoneOffset.UTC)
Run Code Online (Sandbox Code Playgroud)

toEpochMilliSecond不存在

pto*_*mli 5

您可以不使用LocalDateTime#atOffsetZoneOffset#UTC吗?

LocalDateTime.parse(s, dateTimeFormatter).atOffset(ZoneOffset.UTC).toInstant().toEpochMilli()
Run Code Online (Sandbox Code Playgroud)

正如@Andreas在评论中指出的ZoneOffsetis-a ZoneId,因此您可以使用

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
    LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
      .atZone(ZoneOffset.UTC)
      .toInstant()
      .toEpochMilli()
Run Code Online (Sandbox Code Playgroud)