我在解析日期和时间以获取Java的总时数和分钟数时遇到问题。
如果我计算从“星期一22:00”到“星期二22:00”开始的总时间,那么我会得到正确的总时间24。但是,如果我计算从“星期三22:00”到当前日期和时间的总时间,例如“星期四12:45”,然后我得到的是“小时:-153分钟:-15”。
仅在星期三和星期四是这种情况。在剩下的日子里,它工作正常。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class Test {
private static DateFormat dateFormat = new SimpleDateFormat("EEE HH:mm");
private static DateFormat dayFormat = new SimpleDateFormat("E");
private static Calendar calendar = Calendar.getInstance();
public static void main(String[] args) {
try {
Date date1 = dateFormat.parse("Wed 22:00");
Date date2 = dateFormat.parse(dayFormat.format(calendar.getTime()) + " " + calendar.getTime().getHours() + ":"
+ calendar.getTime().getMinutes());
long hours2 = getDurationInHours(date1, date2);
long min = getDurationInMin(date1, date2);
System.out.println("Hours : " + hours2 + " Min : " + min);
} catch (Exception e) {
e.printStackTrace();
}
}
public static long getDurationInHours(Date returnTime, Date leaveTime) {
long durationInMillis = leaveTime.getTime() - returnTime.getTime();
long hours = TimeUnit.MILLISECONDS.toHours(durationInMillis);
return hours;
}
public static long getDurationInMin(Date returnTime, Date leaveTime) {
long durationInMillis = leaveTime.getTime() - returnTime.getTime();
long min = TimeUnit.MILLISECONDS.toMinutes(durationInMillis) % 60;
return min;
}
}
最佳答案
这是因为当您将日期定义为22:00星期三时,不是当前一周的星期三。实际上是1970年1月7日;)
如您所知,java中的日期从1970年1月1日开始就作为长整数使用。因此,当您说星期三而不是实际日期时,它将获得1970年之后的第一个星期三,即第七个星期三。当您说星期一22:00时,它可以正常工作,因为它使用的是1970年1月5日,并且相差2天。
当您以相同的逻辑使用“ Thu 22:00”时,它使用的是1970年1月1日(星期四),因此您得到负数。因为实际上要提前六天