我正在尝试计算 Scala 中 2 个 ZonedTime 日期之间的时差。我以字符串形式接收 "2021-03-19T15:39:42.834248-07:00" 格式的日期。我需要 Scala 中两个日期之间的秒差。 如何将字符串转换为分区时间并计算差异?
答案 0 :(得分:2)
您需要使用 between()
上提供的 temporal.ChronoUnit
方法。
import java.time.ZonedDateTime
import java.time.temporal.ChronoUnit.SECONDS
val start = ZonedDateTime.parse("2021-03-19T15:39:42.834248-07:00")
val stop = ZonedDateTime.parse("2021-03-19T15:49:42.834248-08:00")
val secsBetween:Long = SECONDS.between(start, stop) // 4200
另一种方法是在 until()
实例本身上使用 ZonedDateTime
方法。
val secsBetween:Long = start.until(stop, SECONDS) //same result
答案 1 :(得分:2)
[Java 语法,而不是 Scala。]
Duration
.between
(
OffsetDateTime.parse( "2021-03-19T15:39:42.834248-07:00" ) ,
OffsetDateTime.parse( "2021-03-19T15:49:42.834248-08:00" )
)
.toString()
看到这个code run live at IdeOne.com。
<块引用>PT1H10M
...在标准 ISO 8601 格式中表示 1 小时 10 分钟。
Answer by jwvh 很接近,但我要更改一些东西。
OffsetDateTime
,不是 ZonedDateTime
您的输入字符串仅与 UTC 有一个偏移量,但没有时区。所以将它们解析为 OffsetDateTime
。
-07:00
,这意味着比 UTC 晚 7 小时。Continent/Region
的 time zone has a name。鉴于我们上面的示例,在某些日期,多个时区可能共享 -07:00
的偏移量,包括 America/Dawson
、America/Los_Angeles
、America/Phoenix
、America/Boise
等.OffsetDateTime odt = OffsetDateTime.parse( "2021-03-19T15:39:42.834248-07:00" ) ;
Duration
使用 Duration
在小时-分钟-秒-纳米尺度上表示时间跨度。
Duration d = Duration.between( sooner , later ) ;
以标准 ISO 8601 格式生成文本。
String output = d.toString() ;