如何计算两个时间戳变量之间的持续时间?

hyrbngr7  于 2021-07-14  发布在  Java
关注(0)|答案(5)|浏览(478)

我想计算2个时间戳变量和hh:mm:ss格式输出之间的持续时间

val start_time = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now)
val sourceFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val start_time_dt = sourceFormat.parse(start_time)
val end_time = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now)
val end_time_dt = sourceFormat.parse(end_time)

我试着这样做:

Duration.between(end_time_dt, start_time_dt)

但我得到以下错误:

found   : java.util.Date
required: java.time.temporal.Temporal
1hdlvixo

1hdlvixo1#

你把旧的混合在一起了 java.util.Date 用新的 java.time.LocalDateTime .

import java.time.{LocalDateTime, Duration}

val start = LocalDateTime.now()
val end   = LocalDateTime.now()
val dur   = Duration.between(start, end)

dur.getNano()     //res0: Int = 390318000
dur.getSeconds()  //res1: Long = 0
dur.isZero()      //res2: Boolean = false

您还应该注意,您只需要 Formatter 从/到日期和时间的特定文本表示时。因为您发布的代码示例既不读取日期时间 String ,也不打印日期和时间 String ,我没有在这里包含任何格式。

x6492ojm

x6492ojm2#

下一步应该为你工作-底线:如果你正在与 java.time 别用它以外的东西,比如 java.util.Date :

import java.time._
import java.time.format._

val sourceFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")

val start_time = sourceFormat.format(LocalDateTime.now)
val start_time_dt = LocalDateTime.parse(start_time, sourceFormat)

val end_time = sourceFormat.format(LocalDateTime.now)
val end_time_dt = LocalDateTime.parse(end_time, sourceFormat)

Duration.between(end_time_dt, start_time_dt)

产生结果: PT0S: java.time.Duration 斯卡斯蒂:https://scastie.scala-lang.org/o4itydprrdcne5bosjeofw

c3frrgcw

c3frrgcw3#

方法duration.between()不接受时间戳作为参数。您需要做的就是:

Duration.between(end_time_dt.toInstant(), start_time_dt.toInstant());
mec1mxoz

mec1mxoz4#

java.time.instant文件

这个 LocalDateTime 类没有定义时间点,因此为它们使用的类是错误的。使用它有时会给你错误的持续时间。使用的好类是 Instant .

Instant start = Instant.now();
    TimeUnit.SECONDS.sleep(10);
    Instant end = Instant.now();
    Duration elapsedTime = Duration.between(start, end);

    System.out.println(elapsedTime);
    System.out.format("%02d:%02d:%02d%n", elapsedTime.toHours(),
            elapsedTime.toMinutesPart(), elapsedTime.toSecondsPart());

输出示例:

PT10.002595S
00:00:10

这个 toXxxPart 方法 Duration 我使用的是Java9中介绍的。

mznpcxlj

mznpcxlj5#

根据ivan kurchenko和jwh的评论,下面是我的总结!不确定是否有其他更好的方法以hh:mm:ss格式获取持续时间

import java.time._
import java.time.format._

val sourceFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")

val start_time = sourceFormat.format(LocalDateTime.now)
val start_time_dt = LocalDateTime.parse(start_time, sourceFormat)
Thread.sleep(10000)
val end_time = sourceFormat.format(LocalDateTime.now)
val end_time_dt = LocalDateTime.parse(end_time, sourceFormat)
val duration = Duration.between(start_time_dt, end_time_dt)
val seconds = duration.getSeconds()
val time_sec = seconds % 60
val time_min = (seconds/60) % 60
val time_hour = (seconds/60)/ 60

val dur = f"$time_hour%02d:$time_min%02d:$time_sec%02d"

相关问题