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也出了名的麻烦。您可能想忘掉那些类,改用它。使用它更好。