查找两个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; }
希望这会有所帮助,