判断是否是同一天的函数 ,为什么不行呢?

[code="java"]/**
* 功 能:判断是否是同一天

* 备 注:

@param d1
@param d2
@return
*/
public static boolean isTheSameDay(Date d1,Date d2){
if(d1!=null && d2!=null) {
final long time = d1.getTime();
final long time2 = d2.getTime();
long l = time/MS_OF_ONE_DAY; // MS_OF_ONE_DAY=3600000*24
long l2 = time2/MS_OF_ONE_DAY;
return l==l2;
}
return false;
}[/code]
[b]问题补充:[/b]

to : Alrale

[code="java"]public static boolean isTheSameDay(Date d1,Date d2){

if(d1!=null && d2!=null) {

final long time1 = d1.getTime();

final long time2 = d2.getTime();

// MS_OF_ONE_DAY=3600000*24

return (time1 - time2)/MS_OF_ONE_DAY == 0;

}

return false;

} [/code]

这个肯定是不对的,比如3月31日的 23:59:59 999 和4月1日的00:00:00 000 显然是不同的2天,但是time1-time2=1 整除自然是0 。

to : aninfeel
我的思路就是取得2个时间ms数,然后用ms数整除一天的ms数 就得出 2个时间分别距离1970有多少天 . 如果相距的天数一样自然就是同一天
[b]问题补充:[/b]
HeDYn :
为什么我写的方法不可以呢?
[b]问题补充:[/b]
iampurse :

你看错了吧,
[code="java"]long l = time/MS_OF_ONE_DAY; // MS_OF_ONE_DAY=3600000*24

long l2 = time2/MS_OF_ONE_DAY;

return l==l2; [/code]

这怎么是2个long想减 == 0 啊 ? 完全不一样啊。

[code="java"]
public static boolean isTheSameDay(Date d1,Date d2) {
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(d1);
c2.setTime(d2);
return (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR))
&& (c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH))
&& (c1.get(Calendar.DAY_OF_MONTH) == c2.get(Calendar.DAY_OF_MONTH));
}
[/code]

这个当然不可以,你的代码是精确到秒的吧?
还是比秒更精确 - -~

getTime()得到的是从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,而不是从00年1月1日0时0分0秒至现在的,所以除以MS_OF_ONE_DAY并不能得到准确的天数,要判断是否同一天,记得有个getDay()

[code="java"]
public static boolean isTheSameDay(Date d1,Date d2){

if(d1!=null && d2!=null) {

final long time1 = d1.getTime();

final long time2 = d2.getTime();

// MS_OF_ONE_DAY=3600000*24

return (time1 - time2)/MS_OF_ONE_DAY == 0;

}

return false;

}
[/code]

你那代码必然不可以的好吧。
我都没复制出来运行。

两个long的想减除以一个数 去和0比较 ==

囧rz

将long改成float试试

转换成float类型

[code="java"]
public static boolean isTheSameDay(Date d1, Date d2) {
if (d1 != null && d2 != null) {
float time = Float.valueOf(String.valueOf(d1.getTime()));
float time2 = Float.valueOf(String.valueOf(d2.getTime()));
float l = time/(3600000*24);
float l2 = time2/(3600000*24);
return l == l2;
}
return false;
}
[/code]

不好意思,上面的没试,以下是正确的:
[code="java"]
public static boolean isTheSameDay(Date d1, Date d2) {
if (d1 != null && d2 != null) {
long time = d1.getTime();
long time2 = d2.getTime();
long MS_OF_ONE_DAY = 8640000;
long l = time/MS_OF_ONE_DAY;
long l2 = time2/MS_OF_ONE_DAY;
return l == l2;
}
return false;
}
[/code]