import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test16 {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1=sdf.parse("2012-09-08 10:10:10");
Date d2=sdf.parse("2012-09-15 00:00:00");
System.out.println(daysBetween(d1,d2));
System.out.println(daysBetween("2012-09-08 10:10:10","2012-09-15 00:00:00"));
}
/**
* 计算两个日期之间相差的天数
* @param smdate 较小的时间
* @param bdate 较大的时间
* @return 相差天数
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
*字符串的日期格式的计算
*/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
}
3
顶
9
踩
分享到:
2012-09-13 22:19
浏览 171439
评论
9 楼
tlghb
2013-03-13
有可能还要去除节假日
7 楼
willsonbin
2012-09-14
好东西.。之前写图书馆管理系统有遇到过..
6 楼
captmjc
2012-09-13
对,漏掉了时区因素。因为getTime()返回的永远是UTC时间,也就是时区永远比我们晚8个小时。所以,你还是calendar吧。或者不介意deprecated的话
public static int daysBetween(Date smdate, Date bdate) {
return (int)(((bdate.getTime() + bdate.getTimezoneOffset() * 60000L)/ 86400000L) - ((smdate.getTime() + smdate.getTimezoneOffset() * 60000L) / 86400000L));
}
5 楼
Luob.
2012-09-13
开始写这东西的时候和你写的一样,可是发现 时间上设置巧妙点,计算出来就不对了.不得已在这样写,没有找到原因。10 个小时不足一天 就不知道 怎么算出来多了一个1
4 楼
Luob.
2012-09-13
captmjc 写道
captmjc 写道
public static int daysBetween(Date smdate,Date bdate) {
return (int)((smdate.getTime() / 86400000L) - (bdate.getTime() / 86400000L));
}
利用整除,算出两个日期分别距离epoch(1970-01-01T00:00:00.000Z)的天数,然后减一下就可以了
补充一下,你之所以先format再parse是为了消除时分秒的影响。整除其实已经解决了这个问题,但是速度显然...
速度确实 有很大影响,
但是 我想说的
2012-09-08 10:00:00----2012-09-15 00:00:00 其实相隔 7天
上面写的有待优化
3 楼
Luob.
2012-09-13
captmjc 写道
public static int daysBetween(Date smdate,Date bdate) {
return (int)((smdate.getTime() / 86400000L) - (bdate.getTime() / 86400000L));
}
利用整除,算出两个日期分别距离epoch(1970-01-01T00:00:00.000Z)的天数,然后减一下就可以了
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1=sdf.parse("2012-09-08 10:00:00");
Date d2=sdf.parse("2012-09-15 00:00:00");
System.out.println(daysBetween(d1,d2));
这样测试的时候 为 -6
2 楼
captmjc
2012-09-13
captmjc 写道
public static int daysBetween(Date smdate,Date bdate) {
return (int)((smdate.getTime() / 86400000L) - (bdate.getTime() / 86400000L));
}
利用整除,算出两个日期分别距离epoch(1970-01-01T00:00:00.000Z)的天数,然后减一下就可以了
补充一下,你之所以先format再parse是为了消除时分秒的影响。整除其实已经解决了这个问题,但是速度显然...
1 楼
captmjc
2012-09-13
public static int daysBetween(Date smdate,Date bdate) {
return (int)((smdate.getTime() / 86400000L) - (bdate.getTime() / 86400000L));
}
利用整除,算出两个日期分别距离epoch(1970-01-01T00:00:00.000Z)的天数,然后减一下就可以了