【问题标题】:How to compare two dates in String format? [duplicate]如何比较字符串格式的两个日期? [复制]
【发布时间】:2015-11-26 15:12:59
【问题描述】:

比较两个字符串格式的日期最简单的方法是什么?我需要知道date1 是否在date2 之后/之前。

String date1 = "2015-12-01";
String date2 = "2015-12-31";

【问题讨论】:

  • 将字符串转换为日期并使用这些比较器。
  • this?
  • 为什么不将它们转换为日期,然后进行比较?
  • 其实,用那种精确的格式,你只需要做一个字符串比较
  • 如果它是一个例子,带有时间戳格式(完全相同的格式,日期字段按优先级排序,零填充,没有像2015-11-35这样的溢出值)那么你很擅长字符串比较,并且这个问题就像问蓝天的颜色。

标签: java date jodatime


【解决方案1】:

对于更通用的方法,您可以将它们都转换为已定义格式的Date 对象,然后使用适当的方法:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

Date date1 = format.parse(date1);
Date date2 = format.parse(date2);

if (date1.compareTo(date2) <= 0) {
    System.out.println("earlier");
}

【讨论】:

    【解决方案2】:

    在这种情况下,您可以只比较字符串date1.compareTo(date2)。

    编辑:但是,正确的方法是使用SimpleDateFormat:

    DateFormat f = new SimpleDateFormat("yyyy-mm-dd");
    Date d1 = f.parse(date1, new ParsePosition(0));
    Date d2 = f.parse(date2, new ParsePosition(0));
    

    然后比较日期:

    d1.compareTo(d2);
    

    如果d1 在d2 之前,则比较将返回负值,如果d1 在d2 之后,则比较将返回正值。

    【讨论】:

    • 不知道哪个在另一个之前或之后
    • 当然可以。在给定的格式中,字母数字顺序等于时间顺序。
    【解决方案3】:

    使用 JodaTime,只需:

    DateTime d1 = DateTime.parse(date1);
    DateTime d2 = DateTime.parse(date2);
    
    Assert.assertTrue(d1.isBefore(d2));
    Assert.assertTrue(d2.isAfter(d1));
    

    【讨论】:

      【解决方案4】:

      我建议您将它们转换为 Date 对象。

      String date1 = "2015-12-01";
      String date2 = "2015-12-31";
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      System.out.println(sdf.parse(date1).before(sdf.parse(date2)));
      

      比较它们如下:

      if(date2 .compareTo(date1) > 0){
          System.out.println(" ---- ");
      }
      

      不是一个理想的选择(date1 和 date2 是字符串),因为它失去了灵活性并且可能导致其自身的问题。

      【讨论】:

        【解决方案5】:

        您可以简单地将字符串转换为日期:

        Date date1 = sdf.parse("2015-12-01");
        Date date2 = sdf.parse("2010-01-01");
        

        然后进行比较,如下所示: 如果(日期1.之后(日期2)){ System.out.println("Date1 在 Date2 之后"); }

        if(date1.before(date2)){
                    System.out.println("Date1 is before Date2");
        }
        
        if(date1.equals(date2)){
                    System.out.println("Date1 is equal Date2");
        }
        

        如果我没记错的话,有一个ParseException 需要处理

        【讨论】:

          【解决方案6】:

          是的,你可以这样比较:

          Date date1 = new Date();
          Date date2 = new Date();
          
          if(date1.before(date2)){
              // statement
          }
          
          if(date1.after(date2)){
              // statement
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-06-24
            • 2020-08-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-08
            • 2013-10-31
            相关资源
            最近更新 更多