[英]How to convert a date time string to long (UNIX Epoch Time) Milliseconds in Java 8 (Scala)
[英]How to convert a date time string to long (UNIX Epoch Time) in Java 8 (Scala)
我想要某种pattern
的字符串的UNIX纪元时间(Posix Time,Unix Time),字符串是正常格式(所以UTC)。 请使用Java 8,而不是Joda或旧Java。
(有关毫秒的信息,请参阅如何将日期时间字符串转换为long(UNIX纪元时间)Java 8中的毫秒数(Scala) )
到目前为止,我有以下内容,但我讨厌这个原因有很多:
"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
是否有任何开销? 如果是这样的话?
您可以使用以下Java代码的等效代码:
static long dateTimeStringToEpoch(String s, String pattern) {
return DateTimeFormatter.ofPattern(pattern).withZone(ZoneOffset.UTC)
.parse(s, p -> p.getLong(ChronoField.INSTANT_SECONDS));
}
当然,处理DateTimeFormatter.ofPattern(pattern).withZone(ZoneOffset.UTC)
意味着在多次遇到相同的模式字符串时可以避免的工作。 这项工作量是否与您的应用程序相关,取决于此操作旁边的操作。
这个缩短了两倍以上( 只有3个方法调用 ):
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.toEpochSecond(ZoneOffset.UTC)
顺便说一句,我会在dateTimeStringToEpoch
之外构建DateTimeFormatter
并将其作为方法参数传递:
def dateTimeStringToEpoch(s: String, formatter: DateTimeFormatter): Long =
LocalDateTime.parse(s, formatter).toEpochSecond(ZoneOffset.UTC)
实际运行性能测试后,初始化方法外的DateTimeFormatter
性能差异很小(仅为2倍)。
scala> val pattern = "yyyy/MM/dd HH:mm:ss"
pattern: String = yyyy/MM/dd HH:mm:ss
scala> time(() => randomDates.map(dateTimeStringToEpoch(_, pattern)))
Took: 1216
scala> time(() => randomDates.map(dateTimeStringToEpochFixed))
Took: 732
你可以试试这个吗,根据你所说的,解析UTC时间,所以我把它作为样本。
Instant.parse("2019-01-24T12:48:14.530Z").getEpochSecond
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.