计算时差

时间:2021-03-30 22:52:59

标签: scala java-time

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

2 个答案:

答案 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。]

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

详情

Answer by jwvh 很接近,但我要更改一些东西。

OffsetDateTime,不是 ZonedDateTime

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

  • 偏移 只是 UTC 基线(通过 Royal Observatory, Greenwich 绘制的线)之前或之后的小时-分钟-秒数。偏移量的一个示例是 -07:00,这意味着比 UTC 晚 7 小时。
  • 时区远不止于此。时区是特定地区人民过去、现在和未来使用偏移量的历史变化。格式为 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() ;
相关问题