我想在一个特定的日期上加上一天。我该怎么做呢?

Date dt = new Date();

现在我想在这个日期上加一天。


当前回答

给定一个Date dt,你有几种可能性:

解决方案1:你可以使用Calendar类:

Date dt = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(dt); 
c.add(Calendar.DATE, 1);
dt = c.getTime();

解决方案2:您应该认真考虑使用Joda-Time库,因为Date类存在各种缺点。使用Joda-Time你可以做以下事情:

Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);

解决方案3:在Java 8中,你还可以使用新的JSR 310 API(它的灵感来自Joda-Time):

Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);

其他回答

为了使它与java无关,基本原则是转换为某种线性日期格式,儒略日、修改的儒略日、从某个纪元开始的秒等,添加您的日期,然后转换回来。

这样做的原因是,您可以将“正确处理闰日、闰秒等”的问题外包给那些运气好的人,他们没有把这个问题搞砸。

我要提醒您,正确使用这些转换例程可能很困难。人们搞砸时间的方式多得惊人,最近一个高调的例子是微软的Zune。不要取笑MS,因为它很容易搞砸。即使有多种不同的时间格式,比如TAI和TT,也无济于事。

你可以像这样尝试java.util.Date库-

int no_of_day_to_add = 1;

Date today = new Date();
Date tomorrow = new Date( today.getYear(), today.getMonth(), today.getDate() + no_of_day_to_add );

根据需要更改no_of_day_to_add的值。

我设置了no_of_day_to_add的值为1,因为你只想添加一天。

更多信息可以在本文档中找到。

Java 1.8版本对数据时间API进行了很好的更新。

下面是一段代码:

    LocalDate lastAprilDay = LocalDate.of(2014, Month.APRIL, 30);
    System.out.println("last april day: " + lastAprilDay);
    LocalDate firstMay = lastAprilDay.plusDays(1);
    System.out.println("should be first may day: " + firstMay);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
    String formatDate = formatter.format(firstMay);
    System.out.println("formatted date: " + formatDate);

输出:

last april day: 2014-04-30
should be first may day: 2014-05-01
formatted date: 01

要了解更多信息,请参阅此类的Java文档:

LocalDate DateTimeFormatter

你想在几天后找到日期这个代码尝试..

public Date getToDateAfterDays(Integer day) {
        Date nowdate = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(nowdate);
        cal.add(Calendar.DATE, day);
        return cal.getTime();
    }

您可以在导入org.apache.commons.lang.time.DateUtils后使用此方法:

DateUtils.addDays(new Date(), 1);