查找两个date之间的总时数

我有两个date对象,我需要得到时差,所以我可以确定他们之间的总小时数。 他们碰巧是从同一天。 我想要的结果将有小时和分钟。

当我在我的Date对象上使用.toString()时,我得到这个:Fri Dec 18 08:08:10 CST 2009

我已经尝试了以下内容:

long diff=(this.endDate.getTime()-this.startDate.getTime())/(60*60 * 1000); 

但这只给我几个小时,而不是分钟。 我知道这是一个简单的问题,但我不知道atm。

编辑:对于那些感兴趣的最终解决scheme。 感谢Michael Brewer-Davis

 Period p = new Period(this.startDate, this.endDate); long hours = p.getHours(); long minutes = p.getMinutes(); String format = String.format("%%0%dd", 2); return Long.toString(hours)+":"+String.format(format, minutes); 

以下是Joda时间的工作原理:

 DateTime startTime, endTime; Period p = new Period(startTime, endTime); int hours = p.getHours(); int minutes = p.getMinutes(); 

你可以用Joda格式化器格式化,例如PeriodFormat,但是我build议使用Java。 看到这个问题的更多细节。

这应该工作。

 long secs = (this.endDate.getTime() - this.startDate.getTime()) / 1000; int hours = secs / 3600; secs = secs % 3600; int mins = secs / 60; secs = secs % 60; 

这里简单的方法:

 private static int hoursDifference(Date date1, Date date2) { final int MILLI_TO_HOUR = 1000 * 60 * 60; return (int) (date1.getTime() - date2.getTime()) / MILLI_TO_HOUR; } 

请按照Somaiah的build议在评论中使用小时代替:

Hours hours = Hours.hoursBetween(startTime,endTime);

对getHours()的调用将仅返回时差的小时部分,并忽略所有年份和月份的差异,因此在某些情况下不会正确。

如果使用Period.toStandardHours()尝试将时差转换为小时,那么如果由于月的长度未知,两个date之间的时间差包括年份或月份的差异,则计算将抛出exception。

所以我假定getTime()方法返回一个整数。

在这种情况下,左括号的types是int,对吗?

 (60*60*1000) 

也是一个整数。

这意味着你得到长diff =((int)/(int)),所以整数除法是在你将东西投入长时间之前完成的。 因此,你失去了你的分钟。

尝试之前,你分裂铸造他们。

这里是简单的方法: –检查你的Date format ,如果你的date不是这种格式,然后改变它,并传递给这个方法,它会给你一个String ,这是你的结果。 按照要求修改方法。

 private String getDateAsTime(String datePrev) { String daysAsTime = ""; long day = 0, diff = 0; String outputPattern = "yyyy:MM:dd HH:mm:ss"; SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern); Calendar c = Calendar.getInstance(); String dateCurrent = outputFormat.format(c.getTime()); try { Date date1 = outputFormat.parse(datePrev); Date date2 = outputFormat.parse(dateCurrent); diff = date2.getTime() - date1.getTime(); day = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); } catch (ParseException e) { e.printStackTrace(); } if (day == 0) { long hour = TimeUnit.HOURS.convert(diff, TimeUnit.MILLISECONDS); if (hour == 0) daysAsTime = String.valueOf(TimeUnit.MINUTES.convert(diff, TimeUnit.MILLISECONDS)).concat(" minutes ago"); else daysAsTime = String.valueOf(hour).concat(" hours ago"); } else { daysAsTime = String.valueOf(day).concat(" days ago"); } return daysAsTime; } 

希望这会有所帮助,