【问题标题】:How to add days to a date in Java如何在 Java 中将日期添加到日期
【发布时间】:2010-03-24 11:59:17
【问题描述】:

我想在日期中添加天数以获取 Java 中的新日期。如何使用Calendar 类来实现。

Calendar dom = new GregorianCalendar(d, m, y);

是我的制造日期的实例,我想达到到期日期,将当前日期增加大约 100 天,并将其存储在变量 doe 中,但无法做到这一点。

【问题讨论】:

    标签: java date


    【解决方案1】:

    java.time

    现在,多年后,旧的 java.util.Date/.Calendar 类被 Java 8 及更高版本中的新 java.time 包所取代。

    这些新类包括一个 LocalDate 类,用于表示仅日期,没有时间和时区。

    LocalDate localDate = LocalDate.of( 2015 , 2 , 3 ) ;
    LocalDate later = localDate.plusDays( 100 );
    

    上面的代码适用于日期。如果您需要知道确切的到期时间,那么您需要时间和时区。在这种情况下,请使用ZonedDateTime 类。

    ZoneId zone = ZoneId.of( "America/Montreal" ) ;
    ZonedDateTime zdt = later.atStartOfDay( zone ) ;
    

    【讨论】:

      【解决方案2】:

      使用Calendar#add()。这是一个启动示例。

      Calendar dom = Calendar.getInstance();
      dom.clear();
      dom.set(y, m, d); // Note: month is zero based! Subtract with 1 if needed.
      Calendar expire = (Calendar) dom.clone();
      expire.add(Calendar.DATE, 100);
      

      如果您想要更大的灵活性和更少冗长的代码,我建议您使用JodaTime

      DateTime dom = new DateTime(y, m, d, 0, 0, 0, 0);
      DateTime expire = dom.plusDays(100);
      

      【讨论】:

      • 非常感谢。但是,当我尝试创建具有附加值的新日历实例作为新日期时,它不会将其存储在新实例中。
      • 你不应该这样做new GregorianCalendar(d, m, y)。按照与上述相同的步骤进行操作。这是唯一正确的方法。此外,请注意您应该输入y, m, d 而不是d, m, y。另请注意,月份是从零开始的。一月是 0,二月是 1,三月是 2,等等。这是一场噩梦,Calendar
      • 快速提问 - 为什么不推荐使用 new GregorianCalendar(...)?
      • 两个原因:1) 对接口/抽象类进行编程是一种更好的做法。 2)您确实需要clear()日历以避免在克隆/比较/等时迟早发生冲突。
      【解决方案3】:
          DateFormat formatter = null;
          Date convertedDate = null;
          formatter = new SimpleDateFormat("yyyy-MM-dd");
          try {
              convertedDate = (Date) formatter.parse(pro.getDate().toString());//pro.getDate() is the date getting from database
          } catch (ParseException e) {
              e.printStackTrace();
          }
          Calendar cal = Calendar.getInstance();
          cal.setTime(convertedDate);
          cal.add(Calendar.DATE, 7);
              Date cvdate=cal.getTime();
          if (cvdate.after(new Date())){
       //do Something if you show expire...
      }
      

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 1970-01-01
        • 2010-10-08
        • 2010-11-28
        • 2011-10-15
        • 1970-01-01
        • 2014-01-26
        相关资源
        最近更新 更多