2011-02-26 65 views
8

可能重复:
How can I increment a date by one day in Java?增量现有日期

我有一个现有的约会对象,我想用一天的时间增加,同时保持所有其他领域一样。我遇到的每个示例都会花费小时/分钟/秒,或者您必须创建一个新的日期对象并将字段传输过来。有没有办法让你的日间场地增加1?

感谢

编辑:对不起,我不是故意的一个递增一天的价值,我的意思提前一天向前1

+0

号的唯一方法是1天添加日期。原因是:假设你将5月31日的日期字段增加1,这是否使5月32日?而如果您添加1天,则Java会处理该问题。 – Soumya 2011-02-26 20:57:23

+1

'date.setTime(date.getTime()+ 24 * 60 * 60 * 1000)'是一个简单的肮脏解决方案。没有指定时区的 – maaartinus 2011-02-26 22:32:20

+0

没有当前日期。 – bestsss 2011-02-26 23:19:16

回答

23
Calendar c = Calendar.getInstance(); 
c.setTime(yourdate); 
c.add(Calendar.DATE, 1); 
Date newDate = c.getTime(); 
+1

真的很好的解决方案。但它是否也适用于1月份的第31个月?那么发生了什么? – 2012-05-10 07:29:03

+4

真的吗?它需要4行代码来增加日期?这太愚蠢了。 – 2012-05-24 18:05:08

5

Date对象本身(假设你的意思java.util.Date )没有Day字段,只有一个“自Unix Epoch以来的毫秒数”值。 (该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()方法时区也是如此,如果你不希望使用本地时区。)

    /** 
    * 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()); 
    } 
    

    如果你是做多该日期的操作,更好地利用直接日历对象,而不是从一次又一次转换到日期。

4
org.apache.commons.lang.time.DateUtils.addDays(date, 1);