【问题标题】:How to calculate the time difference in seconds? [duplicate]如何计算以秒为单位的时间差? [复制]
【发布时间】:2018-07-30 17:06:51
【问题描述】:

我有两个日期时间字符串:

val formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd-hh-mm-ss")
val startTime = formatter format ZonedDateTime.now(ZoneId.of("UTC"))
//...
val endTime = formatter format ZonedDateTime.now(ZoneId.of("UTC"))

如何计算endTimestartTime 之间的秒数差异?

【问题讨论】:

  • @RobertUdah:那么,你在哪里看到重复的?我正在使用 ZonedDateTime
  • @OleV.V.在这种情况下,如果我的问题可以被否决,我将不胜感激

标签: java scala datetime-format zoneddatetime


【解决方案1】:

使用java.time.temporal.ChronoUnit

// difference in seconds
ChronoUnit.SECONDS.between(startTime, endTime)

但是startTimeendTime 必须是ZonedDateTime 对象,而不是字符串。

请记住,结果是四舍五入的 - 如果真正的差异是 1999 毫秒,那么上面的代码将返回 1(因为 1999 毫秒不足以构成 2 秒)。

另外一个细节是你可以用ZoneOffset.UTC代替ZoneId.of("UTC"),结果是一样的。

实际上,如果您使用 UTC,为什么不改用 Instant.now()?上面的between 方法与Instant 的工作方式相同:

val start = Instant.now()
val end = Instant.now()

val diffInSecs = ChronoUnit.SECONDS.between(start, end)

【讨论】:

  • 你是这个意思吗? val start = Instant.now(), val end = Instant.now(), Instant.between(start,end)
  • @Markus ChronoUnit.SECONDS.between(start, end)
  • 如何使用getEpochSecond()ZonedDateTime.now(ZoneId.of("UTC"))Instant.now()获取Unix时间戳?
  • @Markus getEpochSecond() 只返回秒值。要以毫秒为单位获取时间戳,请使用 Instant.now().toEpochMilli() - 或 ZonedDateTime.now(ZoneOffset.UTC).toInstant().toEpochMilli()
  • 你能支持我的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多