我试图计算两次之间有多少毫秒(例如在13:00到13:01之间有60000毫秒)。时间用两个整数(小时,分钟)表示。
我写了这个函数:
public static long millisBetweenTimes(int h1, int m1, int h2, int m2) { //hour1, minute1, hour2, minute2
long millis;
millis = (h2 - h1) * (60 * 60000);
if (m < tm)
millis += (m2 - m1) * 60000;
else
millis -= (m1 - m2) * 60000;
return millis;
}
然而,当第二次是第二天时(例如,从周日14:00到周一13:00之间有多少毫秒?)
正如Robby在评论中所说,您应该使用java.time
包中的类。对于LocalTime
和Duration
类,您可以得到两个时间点之间的毫秒数。
LocalTime t0 = LocalTime.of(14, 0);
LocalTime t1 = LocalTime.of(13, 0);
Duration d = Duration.between(t0, t1);
if (d.isNegative()) {
d = d.plusDays(1);
}
System.out.println(d.toMillis());
ADuration
表示持续时间,即两个时间点之间的时间。如果第二次在第一次之前,那么持续时间为负。在这种情况下,我们需要在持续时间上增加1天。
现在我们有一个由Duration
类表示的时间量。该类包含许多将其转换为特定时间单位的方法。在我们的例子中,toMillis()
正是我们所需要的。
在线演示/kbd>如果你认为t1.isBefore(t0)
更有表现力,你也可以用它来代替d.isNegative()
。
注意:我认为这比你自己做数学要笨得多。
您的方法只适用于单个24小时周期,因为您传入两个小时整数并减去它们。因此,如果您正在计算明天13:00到14:00之间的毫秒数,那么第二次输入需要是25:00,因为24小时已经过去了。另一种方法是使用java日期,并从您想要开始和结束的一天中取出小时。