java中比较两个日期Date的大小

本文介绍两种在Java中比较日期的方法。第一种使用SimpleDateFormat解析字符串为Date类型,并通过比较毫秒数来判断先后。第二种利用Date类的compareTo方法直接对比两个日期的大小。

第一种方式:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
*
* @author hp
*/
public class test {

    public static void main(String args[]) {
       int i= compare_date("1995-11-12 15:21", "1999-12-11 09:59");
       System.out.println("i=="+i);
    }

    public static int compare_date(String DATE1, String DATE2) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        try {
            Date dt1 = df.parse(DATE1);
            Date dt2 = df.parse(DATE2);
            if (dt1.getTime() > dt2.getTime()) {
                System.out.println("dt1 在dt2前");
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                System.out.println("dt1在dt2后");
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }
}

 

 

第二种方式:

       两个Date类型的变量可以通过compareTo方法来比较。此方法的描述是这样的:如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。
实际上比较的是自1970 年 1 月 1 日 00:00:00 GMT以来的毫秒数。毫秒数越大的时间越大。

String DateStr1 = "2011-10-1 10:20:16";
String DateStr2 = "2011-10-07 15:50:35";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dateTime1 = dateFormat.parse(DateStr1);
Date dateTime2 = dateFormat.parse(DateStr2);
int i = dateTime1.compareTo(dateTime2); 
System.out.println(i < 0); 

 

简单说明一下:

  SimpleDateFormat函数语法:
  G 年代标志符
  y 年
  M 月
  d 日
  h 时 在上午或下午 (1~12)
  H 时 在一天中 (0~23)
  m 分
  s 秒
  S 毫秒
  E 星期
  D 一年中的第几天
  F 一月中第几个星期几
  w 一年中第几个星期
  W 一月中第几个星期
  a 上午 / 下午 标记符 
  k 时 在一天中 (1~24)
  K 时 在上午或下午 (0~11)
  z 时区

 

http://www.cnblogs.com/QQParadise/articles/1501420.html

http://blog.sina.com.cn/s/blog_4b3196670101bjyr.html

<think>好的,用户想知道在Java中如何比较两个Date类型大小。这个问题看起来挺常见的,但作为新手可能会有点困惑,我得仔细想想怎么回答。 首先,我得确认用户提到的Date类型java.util.Date还是java.sql.Date。不过通常来说,大多数情况是java.util.Date,所以先按这个来考虑。不过可能后面需要提一下两者的区别,如果有的话。 比较Date大小,其实就是比较时间的先后。Date对象内部是用long类型的时间戳表示的,所以可以直接获取时间戳来比较。不过Java本身有没有提供比较的方法呢?比如Date类的before、after方法。对了,是的,Date类有before(Date when)和after(Date when)这两个方法,可以直接用来比较两个日期的时间先后。 另外,用户可能也知道,Date实现了Comparable接口,所以可以用compareTo方法。这个方法返回负数、零、正数,分别代表当前日期在参数日期之前、相同、之后。这也是一个常用的方式。 还有可能用户会想到转换成毫秒数来比较,比如用getTime()方法获取时间戳,然后直接比较两个long值的大小。这种方法虽然基础,但也是可行的,特别是对于习惯处理时间戳的开发者来说。 不过需要注意,如果有一个Date对象是null的话,这些方法都会抛出NullPointerException,所以实际使用时要确保对象不为空,或者在比较前做空值检查。这一点可能需要提醒用户,避免潜在的运行时错误。 另外,Java 8之后引入了新的日期时间API,比如LocalDateTime,但用户可能还在用旧的Date类,特别是维护老项目的时候。不过如果有机会的话,推荐使用新的API可能更好,但当前问题还是围绕Date类型,所以先不展开。 用户可能还想知道不同比较方式的优缺点。比如,使用before和after方法更直观,而compareTo方法适合在需要排序的时候使用,比如放入集合中进行排序。而直接比较时间戳则更底层,可能在某些情况下更灵活。 最后,可能需要给出具体的代码示例,展示这几种方法的使用,让用户更清楚如何实现。比如: 1. 使用before和after: if (date1.before(date2)) { // date1在date2之前 } else if (date1.after(date2)) { // date1在date2之后 } else { // 相等 } 2. 使用compareTo: int result = date1.compareTo(date2); if (result < 0) { // date1在date2之前 } else if (result > 0) { // date1在date2之后 } else { // 相等 } 3. 比较时间戳: long time1 = date1.getTime(); long time2 = date2.getTime(); if (time1 < time2) { // date1更早 } else if (time1 > time2) { // date1更晚 } else { // 相同 } 同时,提醒用户注意空指针的问题,确保date1和date2都不是null,或者在比较前进行判断。比如: if (date1 != null && date2 != null) { // 进行比较操作 } else { // 处理null的情况 } 总结来说,用户需要的是几种不同的方法来比较Date对象的先后顺序,以及相关的注意事项。需要把这些方法都列出来,并说明各自的适用场景和潜在问题,确保用户能够根据实际情况选择合适的方法。</think>在Java比较两个`java.util.Date`对象的大小,可以通过以下3种方法实现: --- ### 方法1:使用`before()`和`after()`方法(最直观) ```java Date date1 = new Date(); Date date2 = new Date(); if (date1.before(date2)) { System.out.println("date1在date2之前"); } else if (date1.after(date2)) { System.out.println("date1在date2之后"); } else { System.out.println("两个时间相同"); } ``` --- ### 方法2:使用`compareTo()`方法(适合排序) ```java int comparisonResult = date1.compareTo(date2); if (comparisonResult < 0) { System.out.println("date1更早"); } else if (comparisonResult > 0) { System.out.println("date1更晚"); } else { System.out.println("时间相同"); } ``` --- ### 方法3:直接比较时间戳(最底层) ```java long time1 = date1.getTime(); long time2 = date2.getTime(); if (time1 < time2) { System.out.println("date1更早"); } else if (time1 > time2) { System.out.println("date1更晚"); } else { System.out.println("时间相同"); } ``` --- ### 🚨 关键注意事项 1. **空值检查**:所有方法都需要先验证`date1`和`date2`不为`null`,否则会抛出`NullPointerException` 2. **精度问题**:`Date`对象包含毫秒级精度,即使同一秒内的不同毫秒也会被判定为不同 3. **时区一致性**:确保两个`Date`对象基于相同的时区生成 --- ### 🔄 新旧API对比 如果使用Java 8+,更推荐新的时间API: ```java Instant instant1 = date1.toInstant(); Instant instant2 = date2.toInstant(); // 使用instant1.isBefore(instant2)等新方法 ``` --- ### 📊 方法选择建议 | 场景 | 推荐方法 | |--------------------|----------------------| | 简单判断先后 | `before()`/`after()` | | 需要排序或比较结果数值 | `compareTo()` | | 需要处理其他时间计算 | 时间戳比较 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值