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