计算时差
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/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() ;
我正在尝试计算 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/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() ;