我想计算开始时间和结束时间之间的差异。以HH:mm
格式。
例如,如果开始时间为22.00
,结束时间为1.00
,则会收到负值。
如何让程序知道第二天的结束时间?
我的剧本:
public void setBeginTijd()
{
String dateStart = "22:00";
String dateEnd = "1:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateEnd);
long diff = d2.getTime() - d1.getTime();
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
System.out.println(diffMinutes);
System.out.println(diffHours);
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:6)
如果您假设那么,当时间为负时,第二次必须在第二天,那么您可以简单地说
if (diff < 0)
{
diff = (24 * 60 * 60 * 1000) + diff;
}
编辑详细说明这一点,也是为了回应评论:当然这是一个非常简单的解决方案。它无法处理第二个日期是两天后的情况。它不处理DST开关。它不处理time zone change on December 31st, 1927 in Shanghai。它不能替代正确建模的日期及其所有警告。这是一种尽力而为的方法,可以(可能)从给定的信息中得出什么。
答案 1 :(得分:1)
试试这个
SimpleDateFormat formatNextDay = new SimpleDateFormat("dd:HH:mm");
boolean isNextDay=false;
try {
if (d1.after(d2)) {
isNextDay=true;
d1 = formatNextDay.parse("1:" + dateStart);
d2 = formatNextDay.parse("2:" + dateEnd);
}
答案 2 :(得分:0)
您应该在日期中包含日期,月份和年份。
这是运行程序后Java中的日期:
d1 = Thu Jan 01 22:00:00 CET 1970
d2 = Thu Jan 01 01:00:00 CET 1970
答案 3 :(得分:0)
正如一些人已经提到的,重要的是要知道每个事件的日期,月份和年份,以计算不在同一天的事件的时间段。
我按照我认为可以帮助您的方式修改了您的方法:
public void setBeginTijd()
{
String dateStart = "22.08.2014 22:00";
String dateEnd = "25.08.2014 01:00";
SimpleDateFormat fullFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
Date d1 = null;
Date d2 = null;
try
{
d1 = fullFormat.parse(dateStart);
d2 = fullFormat.parse(dateEnd);
long diff = d2.getTime() - d1.getTime();
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Delta minutes: " + diffMinutes);
System.out.println("Delta hours: " + diffHours);
System.out.println("Delta days: " + diffDays);
}
catch (Exception e)
{
e.printStackTrace();
}
}
答案 4 :(得分:0)
以下是小时和时间差的正确数学运算。分钟。当您操作int / long值时,会自动发生小数部分的剥离。
long diff = d2.getTime() - d1.getTime();
long diffHours = diff / 1000 / 60 / 60;
long diffMinutes = diff / 1000 / 60 - diffHours * 60;