时间差 - 从午夜之前到午夜之后没有约会

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间差 - 从午夜之前到午夜之后没有约会相关的知识,希望对你有一定的参考价值。

我正在努力计算午夜后的时间:

String time = "15:00-18:05"; //Calculating OK
    //String time = "22:00-01:05"; //Not calculating properly
    String[] parts = time.split("-");

    SimpleDateFormat format = new SimpleDateFormat("HH:mm");
    Date date1 = null;
    Date date2 = null;
    Date dateMid = null;


    String dateInString = "24:00";
    try {
        dateMid = format.parse(dateInString);
    } catch (ParseException e1) {
        e1.printStackTrace();
    }

    try {
        date1 = format.parse(parts[0]);
        date2 = format.parse(parts[1]);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    long difference = date2.getTime() - date1.getTime();


    if (date2.getTime()<date1.getTime()) //in case beyond midnight calculation
    {
        difference = dateMid.getTime()-difference;
    }



    int minutes = (int) ((difference / (1000*60)) % 60);
    int hours   = (int) ((difference / (1000*60*60)) % 24);

    String tot = String.format("%02d:%02d", hours,minutes);
    System.out.println("dif2: "+tot);
答案

如果你不关心夏令时的变化并且你认为世界是理想的(它不是),你可以从24小时中减去结束和开始之间的持续时间(将end视为开始和start作为结束) :

String time = "22:00-01:05";
String[] parts = time.split("-");

LocalTime start = LocalTime.parse(parts[0]);
LocalTime end = LocalTime.parse(parts[1]);
if (start.isBefore(end)) { // normal case
    System.out.println(Duration.between(start, end));
} else { // 24 - duration between end and start, note how end and start switched places
    System.out.println(Duration.ofHours(24).minus(Duration.between(end, start)));
}

以上是关于时间差 - 从午夜之前到午夜之后没有约会的主要内容,如果未能解决你的问题,请参考以下文章

绘制跨越午夜的到达和离开时间

12点前的数据

午夜

变异时间 (HH:MM:SS) 到日期 (YYYY-MM-DD) 占 R 中的午夜

查找时间跨越午夜边界的每组的第一天

csharp Epicor:从午夜到实际时间转换秒数