我希望能够获取一个以普通格式表示的字符串在某个pattern
下的 UNIX Epoch 时间 (Posix 时间,Unix 时间),该字符串采用 UTC 格式。请使用 Java 8,不要使用 Joda 或旧版本的 Java。
(如需毫秒级别的时间,请参见How to convert a date time string to long (UNIX Epoch Time) Milliseconds in Java 8 (Scala))
到目前为止,我有以下代码,但我不喜欢它,因为:
- 对于最常见的日期操作(转换为 UNIX Epoch 时间),这段代码过于冗长。需要七个方法调用才能实现。
- 它必须指定 UTC,但是 UTC 只是一个默认值,为什么我必须在此处明确指定?
- 它有一个字符串字面量
"UTC"
- 它有一个神奇数字
ZoneOffset.ofHours(0)
我的最佳代码如下:
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
.toInstant().getEpochSeconds
此外,额外的问题是,这种方法是否有效?使用
DateTimeFormatter.ofPattern(pattern)
创建DateTimeFormatter
是否存在任何开销?如果有,为什么?
ZoneOffset.UTC
。 - FlownDateTimeFormatter
可能会有一些开销。如果担心这个问题并且模式相同,请将其设置为常量。您可以安全地这样做,它是线程安全的。每次调用少一个方法调用... - Ole V.V.