计算时差

Calculate the time difference

我正在尝试计算 Scala 中 2 个 ZonedTime 日期之间的时差。我收到 "2021-03-19T15:39:42.834248-07:00" 格式的字符串形式的日期。我需要 Scala 中两个日期之间的秒数差异。 如何将字符串转换为分区时间并计算差值?

您需要使用 temporal.ChronoUnit 上提供的 between() 方法。

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

另一种方法是在 ZonedDateTime 实例本身上使用 until() 方法。

val secsBetween:Long = start.until(stop, SECONDS) //same result

[Java 语法,不是 Scala。]

tl;博士

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 分钟。

详情

很接近,但我会更改一些内容。

OffsetDateTime,不是ZonedDateTime

您的输入字符串仅与 UTC 有一个偏移量,但没有时区。所以将它们解析为 OffsetDateTime.

  • 偏移量 只是提前或落后 UTC 基线(通过 Royal Observatory, Greenwich 绘制的线)的小时-分钟-秒数。偏移量的一个示例是 -07:00,这意味着比 UTC 晚七小时。
  • 时区远不止于此。时区是特定地区的人们使用的偏移量的过去、现在和未来变化的历史。格式为 Continent/Regiontime zone has a name。鉴于我们上面的示例,在某些日期,多个时区可能共享 -07:00 的偏移量,包括 America/DawsonAmerica/Los_AngelesAmerica/PhoenixAmerica/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() ;