【问题标题】:Increment existing date by 1 day [duplicate]将现有日期增加 1 天 [重复]
【发布时间】:2011-07-05 00:28:55
【问题描述】:

可能重复:
How can I increment a date by one day in Java?

我有一个现有的日期对象,我想增加一天,同时保持其他所有字段相同。我遇到的每个示例都会减少小时/分钟/秒,或者您必须创建一个新的日期对象并将字段转移过来。有没有一种方法可以将日期字段提前 1?

谢谢

编辑:对不起,我的意思不是将一天的值增加一,我的意思是将一天向前推进 1

【问题讨论】:

  • 没有。唯一的方法是在日期上加 1 天。原因:假设您将 5 月 31 日的日期字段增加 1。那会是 5 月 32 日吗?而如果你增加 1 天,Java 会处理这个问题。
  • date.setTime(date.getTime() + 24*60*60*1000) 之类的东西是一个简单的肮脏解决方案。
  • 没有指定时区没有当前日期。

标签: java date


【解决方案1】:
Calendar c = Calendar.getInstance();
c.setTime(yourdate);
c.add(Calendar.DATE, 1);
Date newDate = c.getTime();

【讨论】:

  • 非常好的解决方案。但它也适用于 1 月的 31 日吗?然后发生了什么?
  • 真的吗?增加日期需要 4 行代码?!这简直是​​愚蠢的。
【解决方案2】:

Date 对象本身(假设您的意思是 java.util.Date)没有 Day 字段,只有“自 Unix 纪元以来的毫秒数”值。 (toString() 方法会根据当前语言环境打印此内容。)

根据你想做什么,原则上有两种方法:

  • 如果您只想“在给定日期后 24 小时”,您可以简单地将 1000 * 60 * 60 * 24 毫秒添加到时间值,然后设置它。如果两者之间有夏令时转换,则可能是您的旧日期是 11:07,而新日期是 10:07 或 12:07(取决于转换方向),但它仍然是 24时差。

    private final static long MILLISECONDS_PER_DAY = 1000L * 60 * 60 * 24;
    
    /**
     * shift the given Date by exactly 24 hours.
     */
    public static void shiftDate(Date d) {
        long time = d.getTime();
        time += MILLISECONDS_PER_DAY;
        d.setTime(time);
    }
    
  • 如果您想要“下一个日历日的同一时间”,您最好使用日历,就像 MeBigFatGuy 展示的那样。 (如果您不想使用您的本地时区,也许您也想给这个 getInstance() 方法提供 TimeZone。)

    /**
     * Shifts the given Date to the same time at the next day.
     * This uses the current time zone.
     */
    public static void shiftDate(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.add(Calendar.DATE, 1);
        d.setTime(c.getTimeInMillis());
    }
    

    如果您正在执行多个此类日期操作,最好直接使用 Calendar 对象,而不是一次又一次地从 Date 转换为 Date。

【讨论】:

    【解决方案3】:
    org.apache.commons.lang.time.DateUtils.addDays(date, 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2019-08-02
      • 2021-06-16
      • 1970-01-01
      相关资源
      最近更新 更多