【发布时间】:2019-08-03 02:42:18
【问题描述】:
本题秒解:How to convert a date time string to long (UNIX Epoch Time) in Java 8 (Scala)
但如果我想要毫秒,我似乎必须使用
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
.toInstant().toEpochMilli
这对于我在另一个问题中详述的 4 个问题来说是丑陋的(我不喜欢的主要是魔法文字 "UTC" 和魔法数字 0)。
很遗憾,以下内容无法编译
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.toEpochMilliSecond(ZoneOffset.UTC)
因为toEpochMilliSecond 不存在
【问题讨论】:
-
用
ZoneOffset.UTC替换ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)) -
@Andreas 差不多。 ZoneOffset.UTC 是
ZoneOffset,所以需要将atZone的调用改为atOffset。 -
@ptomli 不是严格需要的,因为
ZoneOffset是ZoneId。区别在于返回的是ZonedDateTime还是OffsetDateTime,但由于两者都有toInstant()方法,并且对象没有以其他方式使用,所以没有区别。 -
@Andreas 和 StackOverflow 再次教会了我一些新东西......谢谢
标签: java scala datetime java-8 epoch