有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算两次之间的毫秒数

我试图计算两次之间的毫秒数(例如13:00到13:01之间有60000毫秒)。 时间由2个整数(小时、分钟)表示

我写了这个函数:

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之间有多少毫秒?),则此选项不起作用


共 (2) 个答案

  1. # 1 楼答案

    当你输入两个小时的整数并减去它们时,你的方法只能在一个24小时的周期内工作。因此,如果计算从明天13:00到14:00的毫秒数,第二次输入需要是25:00,因为24小时已经过去了。另一种方法是使用java日期,并从你想开始和结束的那一天算起一小时

  2. # 2 楼答案

    由于Robby已经在注释中said,您应该使用java.time包中的类。使用类LocalTimeDuration,可以得到两个时间点之间的毫秒数

    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()正是我们所需要的

    Online demo

    如果你认为d.isNegative()更具表现力,也可以使用t1.isBefore(t0),而不是d.isNegative()


    注:我认为这并不像自己做数学那么笨拙