@Cesar
2015-12-04T18:06:27.000000Z
字数 1023
阅读 1672
算法
Java
在实际操作中,遇到需要计算两个日期之间的天数的情况
一开始我的想法是这样的:
此地注意,在做出发的时候要保证在1000×69×69×24后面加上l转化为long类型,否则会出现内存越界计算出错的情况。
代码如下所示:
/**
* 默认后面的参数靠后一些
* @param date1
* @param date2
* @return
*/
public static int between2Time(Date date1, Date date2) {
long be = 1;
be = date2.getTime() - date1.getTime();
if (be <= 0) {
be = 1;
}
int re = (int) (be / (1000 * 60 * 60 * 24l));//24后面必须加l将结果转化为long,否则会导致数据越界
return re;
}
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static String date1 = "2013-11-10";
private static String date2 = "2013-11-11";
public static void main(String[] args) throws ParseException {
Date d1 = sdf.parse(date1.substring(0, 10));
Date d2 = sdf.parse(date2.substring(0, 10));
System.out.println(between2Time(d1, d2)+"天");
}
不过始终感觉这种方法不是很好用,Java自带的日期类有点坑,而且这种方法对于不同时区会出一些差错,所以试了一下下面的方法。
发现了一个包,joda-time,里面有关于时间的很多集成函数,做法如下:
public static int between2Time2(Date date1, Date date2) {
DateTime d1 = new DateTime(date1);
DateTime d2 = new DateTime(date2);
return Days.daysBetween(d1, d2).getDays();
}
这样就简洁了很多,比较推荐使用joda-time这个工具