我想减去并获得这两个日期的小时数:
我已经尝试过使用这个公式,我总是得到一个负数。 (例如:-5:0-30)
long diffHours = diff / (60 * 60 * 1000) % 24;
答案 0 :(得分:1)
您可以尝试这样:
Date d1= // start date
Date d2= // end date
long dur = d1.getTime() - d2.getTime();
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(dur);
long diffInMin = TimeUnit.MILLISECONDS.toMinutes(dur);
long diffInHour = TimeUnit.MILLISECONDS.toHours(dur);
答案 1 :(得分:0)
答案 2 :(得分:0)
不知道这会有多大帮助,但从我的excel日子开始,我经常使用这个技巧。您可以设置if语句来检查当天是否发生变化,然后执行(12-预约时间)+(12预订关闭时间)的总和。
我确信有更简单的方法可以做到这一点,但我无法在一分钟内访问我的电脑,因此无法试验您的公式。
您也可以随时查看日期时间格式,并将其格式化为时间。 hh:mm然后再次执行if以检查当天的变化。
答案 3 :(得分:0)
您可以尝试这样的事情
DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Date day1=df.parse("2014-01-01 5:45:00 PM"); // start date
Date day2=df.parse("2014-01-02 2:00:00 AM"); // end date
long milliseconds=day2.getTime()-day1.getTime(); // time gap in mil-seconds
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
答案 4 :(得分:0)
U还可以使用SimpleDateFormat计算时差: 这是示例代码:
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm a");
System.out.println(""+sdf.format(new Date()));
String dateStart ="Jan 1 2014 5:45 PM", dateStop="Jan 2 2014 2:00 AM";
try {
Date d1 = sdf.parse(dateStart);
Date d2 = sdf.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
diffHours = diffHours+24*diffDays;
// System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");
} catch (Exception e) {
e.printStackTrace();
}
答案 5 :(得分:0)
您可以使用Apache Commons javadoc here:
String formatPeriod = DurationFormatUtils.formatPeriod(dateAsMilis1,
dateAsMilis2), "HH:mm:ss:SSS");