将现有日期增加1天

Meg*_*ron 9 java date

可能重复:
如何在Java中将日期增加一天?

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

谢谢

编辑:对不起我并不是说每天增加一天的价值,我的意思是提前一天提前1

MeB*_*Guy 26

Calendar c = Calendar.getInstance();
c.setTime(yourdate);
c.add(Calendar.DATE, 1);
Date newDate = c.getTime();
Run Code Online (Sandbox Code Playgroud)

  • 真?增加日期需要4行代码?!那太傻了. (5认同)
  • 非常好的解决方案.但它是否也适用于1月份的第31个月?然后发生了什么? (2认同)

Paŭ*_*ann 6

Date对象本身(假设你的意思java.util.Date)没有日场,仅值"因为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);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您希望"在下一个日历日同时",最好使用日历,如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());
    }
    
    Run Code Online (Sandbox Code Playgroud)

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


Tom*_*icz 5

org.apache.commons.lang.time.DateUtils.addDays(date, 1);
Run Code Online (Sandbox Code Playgroud)