怎样在java里比较日期时间?

时间:2022-10-11 22:07:47
老鸟们好哈!我刚刚学完最初级的java课程!我要在一个增删改查的控制台做一个DVD管理系统:我要用java语言查询借出DVD超出7天没有归还的客户!该怎么写呢?思路是用当前日期去减去借出日期:如借出时间是6月18日,今天是7月20日,我试过把日期转化为数字?但是还是没有反映?怎样写代码?

27 个解决方案

#1



public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
//设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);

//得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}

#2


楼上正解

#3


         先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

#4


那样的代码我看不懂 啊?

#5


引用 3 楼 liuyun1197628 的回复:
        先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

 先使用获取日期函数,获取当前日期,再取出以前的日期字符串!
          使用subString 截取字符串再比较也可以啊!

#6


完整的测试代码:
http://zhoujingxian.javaeye.com/admin/blogs/440953

#7


那个网站进去不了

#8


楼上的那个师兄,你那个网站进去不了

#9


引用 5 楼 liuyun1197628 的回复:
引用 3 楼 liuyun1197628 的回复:
        先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

先使用获取日期函数,获取当前日期,再取出以前的日期字符串!
          使用subString 截取字符串再比较也可以啊!


你这个截取的如果不自己计算那个月份的天数应该出不来的吧

比如:20090805与20090701,只单纯的用string转int来相剪的话,出来的是104,不是35,如果自己手动处理年份,月份,和天数的话,那就另当别论了啊

#10


谢谢各位的关心咯!我明天去学校机房弄咯,再告诉您们结果哈!谢谢大家!6楼的住户谢谢您的网站

#11


引用 7 楼 meijiao1989zhusha 的回复:
那个网站进去不了


http://zhoujingxian.javaeye.com/blog/440961

贴快了

#12


路过  顶一下

#13


与数据库交互了么,mysql本身支持时间的加减

#14



public static void main(String args[])
{
    getDays("20090618", "20090620");
}

private static long getDays(String before, String after) throws Exception
     {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      Date date1 = sdf.parse(before);
      Date date2 = sdf.parse(after);
      long millSeconds = date2.getTime() - date1.getTime();
      long days = millSeconds/(1000*60*60*24);
      System.out.println("days is : " + days);
      return days;
     }

#15


樓上的方法不錯。也可以。

#16


晕,直接转成long数据类型,就可以比较了
还有就是两个Date可以 compare方法

#17


楼主是北大青鸟的吧.. 这贴应该是 s1的项目...

#18


LZ 的这个项目是拿数组做的.  

#19


。。。
为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
直接传一个7天进去,在SQL里就搞定了。

#20


up

#21


引用 19 楼 bayougeng 的回复:
。。。
 为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
 直接传一个7天进去,在SQL里就搞定了。



嗯。。支持19楼的方法。

#22



import java.util.Date;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;

public class Test {

public static void main(String[] args) {
Date[] dates = new Date[] { java.sql.Date.valueOf("2010-01-05"),
java.sql.Date.valueOf("2009-12-05") };
Date now = new Date();
Date deadline = DateUtils.addDays(now, -7);
System.out.println("当前时间:"+DateFormatUtils.ISO_DATE_FORMAT.format(now));
System.out.println("7天前:"+DateFormatUtils.ISO_DATE_FORMAT.format(deadline));
for(Date date: dates){
if(date.before(deadline)){
System.out.println("超过7天:"+DateFormatUtils.ISO_DATE_FORMAT.format(date));
}else{
System.out.println("没超7天:"+DateFormatUtils.ISO_DATE_FORMAT.format(date));
}
}
}

}

需要commons-lang类库,下载地址:http://commons.apache.org/downloads/download_lang.cgi

#23


  mark

#24


引用 1 楼 liushaoyi0704 的回复:
Java codepublicstaticfinalint daysBetween(Date early, Date late) {
        java.util.Calendar calst= java.util.Calendar.getInstance();
        java.util.Calendar caled= java.util.Calendar.getInstance(?-


这个可以学习;


引用 19 楼 bayougeng 的回复:
。。。
为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
直接传一个7天进去,在SQL里就搞定了。


这个可以

#25


日期化字符串

#26


当前时间减去不违规的天数,然后用得到的时间 after before等函数比较!

#27


格式化成日期类型。然后直接用compareTo比较。

#1



public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
//设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);

//得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}

#2


楼上正解

#3


         先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

#4


那样的代码我看不懂 啊?

#5


引用 3 楼 liuyun1197628 的回复:
        先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

 先使用获取日期函数,获取当前日期,再取出以前的日期字符串!
          使用subString 截取字符串再比较也可以啊!

#6


完整的测试代码:
http://zhoujingxian.javaeye.com/admin/blogs/440953

#7


那个网站进去不了

#8


楼上的那个师兄,你那个网站进去不了

#9


引用 5 楼 liuyun1197628 的回复:
引用 3 楼 liuyun1197628 的回复:
        先使用获取日期函数,获取当前日期,再取出以后的日期字符串!
          使用subString 截取字符串再比较也可以啊!

先使用获取日期函数,获取当前日期,再取出以前的日期字符串!
          使用subString 截取字符串再比较也可以啊!


你这个截取的如果不自己计算那个月份的天数应该出不来的吧

比如:20090805与20090701,只单纯的用string转int来相剪的话,出来的是104,不是35,如果自己手动处理年份,月份,和天数的话,那就另当别论了啊

#10


谢谢各位的关心咯!我明天去学校机房弄咯,再告诉您们结果哈!谢谢大家!6楼的住户谢谢您的网站

#11


引用 7 楼 meijiao1989zhusha 的回复:
那个网站进去不了


http://zhoujingxian.javaeye.com/blog/440961

贴快了

#12


路过  顶一下

#13


与数据库交互了么,mysql本身支持时间的加减

#14



public static void main(String args[])
{
    getDays("20090618", "20090620");
}

private static long getDays(String before, String after) throws Exception
     {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      Date date1 = sdf.parse(before);
      Date date2 = sdf.parse(after);
      long millSeconds = date2.getTime() - date1.getTime();
      long days = millSeconds/(1000*60*60*24);
      System.out.println("days is : " + days);
      return days;
     }

#15


樓上的方法不錯。也可以。

#16


晕,直接转成long数据类型,就可以比较了
还有就是两个Date可以 compare方法

#17


楼主是北大青鸟的吧.. 这贴应该是 s1的项目...

#18


LZ 的这个项目是拿数组做的.  

#19


。。。
为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
直接传一个7天进去,在SQL里就搞定了。

#20


up

#21


引用 19 楼 bayougeng 的回复:
。。。
 为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
 直接传一个7天进去,在SQL里就搞定了。



嗯。。支持19楼的方法。

#22



import java.util.Date;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;

public class Test {

public static void main(String[] args) {
Date[] dates = new Date[] { java.sql.Date.valueOf("2010-01-05"),
java.sql.Date.valueOf("2009-12-05") };
Date now = new Date();
Date deadline = DateUtils.addDays(now, -7);
System.out.println("当前时间:"+DateFormatUtils.ISO_DATE_FORMAT.format(now));
System.out.println("7天前:"+DateFormatUtils.ISO_DATE_FORMAT.format(deadline));
for(Date date: dates){
if(date.before(deadline)){
System.out.println("超过7天:"+DateFormatUtils.ISO_DATE_FORMAT.format(date));
}else{
System.out.println("没超7天:"+DateFormatUtils.ISO_DATE_FORMAT.format(date));
}
}
}

}

需要commons-lang类库,下载地址:http://commons.apache.org/downloads/download_lang.cgi

#23


  mark

#24


引用 1 楼 liushaoyi0704 的回复:
Java codepublicstaticfinalint daysBetween(Date early, Date late) {
        java.util.Calendar calst= java.util.Calendar.getInstance();
        java.util.Calendar caled= java.util.Calendar.getInstance(?-


这个可以学习;


引用 19 楼 bayougeng 的回复:
。。。
为什么要用java算呢?几乎所有数据库都支持时间计算的吧?
直接传一个7天进去,在SQL里就搞定了。


这个可以

#25


日期化字符串

#26


当前时间减去不违规的天数,然后用得到的时间 after before等函数比较!

#27


格式化成日期类型。然后直接用compareTo比较。