Java 时间差-从午夜前到午夜后(无日期)

Java 时间差-从午夜前到午夜后(无日期),java,time,Java,Time,午夜过后,我正在努力计算时间: 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;

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

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);
String time=“15:00-18:05”//计算OK
//字符串时间=“22:00-01:05”//计算不当
String[]parts=time.split(“-”);
SimpleDataFormat格式=新的SimpleDataFormat(“HH:mm”);
Date date1=null;
日期2=空;
Date dateMid=null;
字符串dateInString=“24:00”;
试一试{
dateMid=format.parse(dateInString);
}捕获(解析异常e1){
e1.printStackTrace();
}
试一试{
date1=format.parse(部分[0]);
date2=format.parse(部分[1]);
}捕获(解析异常){
e、 printStackTrace();
}
长差=date2.getTime()-date1.getTime();

如果(date2.getTime()如果您不关心夏令时的变化,并且假设世界是理想的(事实并非如此),您可以从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)));
}

如果您不关心夏令时的变化,并且假设世界是理想的(事实并非如此),您可以从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)));
}

您可以在其中添加一个检查,以验证日期2是否早于日期1。在这种情况下,您可以使用24小时-(date1-date2)要找出日期1和日期2之间的实际差异,夏令时怎么办?22:00-04:00可能是5小时、6小时或7小时的差异,具体取决于一年中的哪一天。问题是什么?日期类早已过时,尤其是SimpleDateFormat也出了名的麻烦。您可能想忘记那些类,改用。使用它会更好。您可以添加一个检查,验证日期2是否早于日期1。在这种情况下,您可以使用24小时-(date1-date2)要找出日期1和日期2之间的实际差异,夏令时怎么办?22:00-04:00可能是5小时、6小时或7小时的差异,具体取决于一年中的哪一天。问题是什么?日期类早已过时,尤其是SimpleDateFormat也出了名的麻烦。您可能想忘掉那些类,改用它。使用它更好。