日期对日期加减

java码农_NO1 2007-11-06 02:49:15
在java中 假如说给你一个date类型的数据
与当前系统时间对比还差多少天怎么加减
请实现下这个接口
public interface IDataText {
public int DataOperation(Data beginData,Data nonceData);
}

返回的int是 (当前时间(nonceData) - 开始时间(beginData))
...全文
524 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2007-11-07
  • 打赏
  • 举报
回复
需要借助Calendar类来计算

Calendar c1=Calendar.getInstance();
c1.setTime(d1);
Calendar c2=Calendar.getInstance();
c2.setTime(d2);

int 相差天数=(int)(d2.getTime()+999-d1.getTime())/24/60/60/1000;
if(c2.get(Calendar.HOUR_OF_DAY)<c1.get(Calendar.HOUR_OF_DAY))//判断小时
相差天数++;
else if(c2.get(Calendar.HOUR_OF_DAY)==c1.get(Calendar.HOUR_OF_DAY))
{
if(c2.get(Calendar.MINUTE)<c1.get(c2.get(Calendar.MINUTE)))
相差天数++;
else if(c2.get(Calendar.MINUTE)==c1.get(c2.get(Calendar.MINUTE)))
{
if(c2.get(Calendar.SECOND)<c1.get(Calendar.SECOND))
相差天数++;
}
}
java码农_NO1 2007-11-07
  • 打赏
  • 举报
回复
我需要的是一个整天数 不需要计算小时 还有就是 闰年 平年的 二月 ,和 大月小月的30或31日 计算进去了吗
Leonhe2022 2007-11-06
  • 打赏
  • 举报
回复
import java.util.Date;
import static java.lang.Math.*;

/**
* @author r
*
*/

public class Test {
/**
* 系统时间由newDate()产生,
*
* @param beginDate
* @param nowDate
* @return 天数差result
*/
public int dateOp(Date beginDate) {
int result = 0;
long now = new Date().getTime();
long begin = beginDate.getTime();
long temp = abs(begin - now);// 若知道时间先后就可用去掉abs方法
// 相差时间1天之内
if (temp < 86400000L) {
// System.out.println("相差不到1天");
result = 0;
} else
// 相差时间大于1天
if (temp >= 86400000L) {
result = (int) (temp / 86400000L);
}
return result;
}

public static void main(String[] args) {
System.out.println(new Test().dateOp(new Date(107, 10, 3)));
}
}
网络咖啡 2007-11-06
  • 打赏
  • 举报
回复
楼上的原理是正确的,只需要加一个判断,就是如果没有整除的话,在相差的天数上做一下处理即可
fdy1000 2007-11-06
  • 打赏
  • 举报
回复
以上方法得到的天数有点问题,如果是当天的晚上减去第二天的早上的八点,按以下算出来的0:


public class Main {
public static void main(String[] args) {

Date d1 = new Date(2008,10,10);

Date d2 = new Date(2007,10,10);

//得到两个日期之间的毫秒数
long x = d1.getTime() - d2.getTime();

// 毫秒/24小时/60分/60秒/1000毫秒 得到天数
System.out.println(x/24/60/60/1000);
}
}



故应该为:
非常简单


public class Main {
public static void main(String[] args) {

Date d1 = new Date(2008,10,10);

Date d2 = new Date(2007,10,10);

// 毫秒/24小时/60分/60秒/1000毫秒 得到天数
long x = d1.getTime()/24/60/60/1000 - d2.getTime()/24/60/60/1000;

System.out.println(x);
}
}

  • 打赏
  • 举报
回复
2007-11-06 23:55:56 和 2007-11-07 00:01:04

如果这样的日期差为 1 天的话,应该先将两个日期的时分秒甚至毫秒都归为0。
  • 打赏
  • 举报
回复
楼上的真的有那么简单吗,想想看是一个 Date 不仅仅是带有年月日的还带有时分秒的。

比如:2007-11-06 23:55:56 和 2007-11-07 00:01:04
还有:2007-11-06 08:00:00 和 2007-11-08 07:00:00

上面的两个,按照楼上的程序,得出的结果少了一天。
hcmsxy 2007-11-06
  • 打赏
  • 举报
回复
非常简单


public class Main {
public static void main(String[] args) {

Date d1 = new Date(2008,10,10);

Date d2 = new Date(2007,10,10);

//得到两个日期之间的毫秒数
long x = d1.getTime() - d2.getTime();

// 毫秒/24小时/60分/60秒/1000毫秒 得到天数
System.out.println(x/24/60/60/1000);
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧