Scala中两个时间戳之间的秒数差 [英] Difference in seconds between two timestamps in Scala

查看:0
本文介绍了Scala中两个时间戳之间的秒数差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个以下格式的时间戳:

1990-10-31 18:43:12

我要计算其中两个时间戳之间的差值。

我尝试的内容:

val t1 = new java.text.SimpleDateFormat("yyyy-mm-dd HH:mm:ss")
val t2 = new java.text.SimpleDateFormat("yyyy-mm-dd HH:mm:ss")
t1.parse(timestamp1)
t2.parse(timestamp2)

但之后我该怎么办?

推荐答案

首先,JAVA现在有java.time(JDK1.8及更高版本)

import java.time._
import java.time.format._

然后(请注意,格式化程序/解析器现在是无状态的,重用它们总是安全的):

val p = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") //note months are MM

val t1 = LocalDateTime.parse(timestamp1, p)
val t2 = LocalDateTime.parse(timestamp2, p)

现在您有两个日期/时间,您需要转换为Instant(实际上是ZonedDateTime,但已经足够了):

val i1 = t1.atZone(ZoneId.of("Europe/London"))
val i2 = t2.atZone(ZoneId.of("Europe/London"))

现在您有两个时刻,您可以将它们区分开来:

import java.time.temporal._
val diff = i1.until(i2, ChronoUnit.SECONDS) //Or MILLIS, MICROS etc

附录

以下是REPL会议:

scala> :paste
// Entering paste mode (ctrl-D to finish)

val timestamp1 = "1990-10-31 18:43:12"
val timestamp2 = "1991-09-29 18:43:12"

import java.time._
import java.time.format._

val p = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") 

val t1 = LocalDateTime.parse(timestamp1, p) 
val t2 = LocalDateTime.parse(timestamp2, p)

val i1 = t1.atZone(ZoneId.of("Europe/London"))
val i2 = t2.atZone(ZoneId.of("Europe/London"))

import java.time.temporal._
val diff = i1.until(i2, ChronoUnit.SECONDS)

结果如下:

// Exiting paste mode, now interpreting.

timestamp1: String = 1990-10-31 18:43:12
timestamp2: String = 1991-09-29 18:43:12
import java.time._
import java.time.format._
p: java.time.format.DateTimeFormatter = Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)
t1: java.time.LocalDateTime = 1990-10-31T18:43:12
t2: java.time.LocalDateTime = 1991-09-29T18:43:12
i1: java.time.ZonedDateTime = 1990-10-31T18:43:12Z[Europe/London]
i2: java.time.ZonedDateTime = 1991-09-29T18:43:12+01:00[Europe/London]
import java.time.temporal._
diff: Long = 28767600

这篇关于Scala中两个时间戳之间的秒数差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆