获取两次之间的毫秒数

14ifxucb  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(333)

这个问题以前可能有人回答过。但我来了。
我有一个值为“21:48”的字符串对象和另一个值为“23:23”的字符串对象。如何计算这两次之间的毫秒数?

5ktev3wc

5ktev3wc1#

使用java时间,您可以通过创建 Duration 对象。

Duration duration = // TODO
long millis = duration.toMillis();

你确实说了 21:48 以及 23:23 作为 String 输入值。你可以用 LocalTime 类来表示小时、分钟和秒的概念。

LocalTime lt1 = LocalTime.parse("21:48");
LocalTime lt2 = LocalTime.parse("23:23");

Duration ldd = Duration.between(lt1, lt2);
long millis = duration.toMillis(); // 5700000

请注意,这个 Duration 只与 LocalTime . 如果你想测量毫秒的实际数量,你必须考虑时区可能采用夏令时。

// in Germany, for example, at 2020-10-25 on 03:00 clocks are turned backward 1 hour 
ZoneId berlin = ZoneId.of("Europe/Berlin");
LocalDateTime ldt1 = LocalDateTime.of(LocalDate.parse("2020-10-24"), lt1);
LocalDateTime ldt2 = LocalDateTime.of(LocalDate.parse("2020-10-25"), lt2);

ZonedDateTime zdt1 = ZonedDateTime.of(ldt1, berlin);
ZonedDateTime zdt2 = ZonedDateTime.of(ldt2, berlin);

// does not consider DST (one hour is missing)
Duration d1 = Duration.between(ldt1, ldt2);
long ms1 = d1.toMillis(); // 92100000

// does consider DST (extra hour applied)
Duration d2 = Duration.between(zdt1, zdt2);
long ms2 = d2.toMillis(); // 95700000
cunj1qz1

cunj1qz12#

您可以使用现代日期时间api来完成此操作,如下所示:

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        long millis = LocalTime.parse("21:48").until(LocalTime.parse("23:23"), ChronoUnit.MILLIS);
        System.out.println(millis);
    }
}

输出:

5700000

在trail:date-time了解有关现代日期时间api的更多信息。

piok6c0g

piok6c0g3#

使用joda时间:

DateTime zero = new DateTime(time); 
long millis = new org.joda.time.Period(DateTime.now()).toDurationFrom(zero).getMillis();

相关问题