这个问题以前可能已经回答过了。但我来了。
我有一个String对象,其值为">21:48";以及另一个值为"的String对象;23:23">如何计算这两次之间的毫秒数
使用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
您可以使用现代日期时间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
有关现代日期时间API的更多信息,请访问跟踪:日期时间。
使用Joda时间:
DateTime zero = new DateTime(time);
long millis = new org.joda.time.Period(DateTime.now()).toDurationFrom(zero).getMillis();