【问题标题】:Get milliseconds between two times获取两次之间的毫秒数
【发布时间】:2020-11-20 20:22:16
【问题描述】:

这个问题之前可能已经回答过了。但我走了。

我有一个值为“21:48”的字符串对象和另一个值为“23:23”的字符串对象。 如何计算这两次之间的毫秒数?

【问题讨论】:

  • 在哪一天?闰秒和夏令时可能会使答案在不同时间有所不同。
  • 可能是同一天,但如果你明白我的意思,时间可能会在午夜之后?
  • 你的formatTime()方法和你的问题有什么关系?

标签: java date time


【解决方案1】:

使用 Java 时间,您可以通过创建 Duration 对象来获取两个日期时间对象之间的总毫秒数。

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

您确实将21:4823: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        

【讨论】:

    【解决方案2】:

    您可以使用modern date-time 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 的更多信息。

    【讨论】:

      【解决方案3】:

      使用Joda-Time

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

      【讨论】:

      • 什么是经期?
      • 我应该把问题中的两个字符串放在哪里?
      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多