将java.util.Date增加一天

Ant*_*ony 21 java date

将java.util.Date增加一天的正确方法是什么.

我在想类似的东西

        Calendar cal = Calendar.getInstance();
        cal.setTime(toDate);
        cal.add(Calendar.DATE, 1);
        toDate = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

它感觉不对.

Thi*_*ilo 19

那会有用.

它感觉不对.

如果是困扰你的冗长,请欢迎使用Java日期时间API :-)


Ivi*_*vin 19

如果你不喜欢Tony Ennis的解决方案中的数学计算

Date someDate = new Date(); // Or whatever
Date dayAfter = new Date(someDate.getTime() + TimeUnit.DAYS.toMillis( 1 ));
Run Code Online (Sandbox Code Playgroud)

但是,自从找到这个Q/A后,或多或少,我一直在使用JodaTime,并且最近已经切换到Java 8中的新DateTime(受到 Joda的启发但没有复制 - 感谢@BasilBourqueless指出这一点).

Java 8

在Java 8中,几乎所有基于时间的类都有一个.plusDays()方法,使得这个任务变得微不足道:

LocalDateTime.now()  .plusDays(1);
LocalDate.now()      .plusDays(1);
ZonedDateTime.now()  .plusDays(1);
Duration.ofDays(1)   .plusDays(1);
Period.ofYears(1)    .plusDays(1);
OffsetTime.now()     .plus(1, ChronoUnit.DAYS);
OffsetDateTime.now() .plus(1, ChronoUnit.DAYS);
Instant.now()        .plus(1, ChronoUnit.DAYS);
Run Code Online (Sandbox Code Playgroud)

Java 8还添加了类和方法,以便在(现在)遗留日期和日历等与新的DateTime类之间进行互操作,这些类肯定是所有新开发的更好选择.


Mat*_*hen 11

是啊,没错.Java Date API经常出错.我建议你试试Joda Time.它会是这样的:

DateTime startDate = ...
DateTime endDate = startDate.plusDays(1);
Run Code Online (Sandbox Code Playgroud)

要么:

Instant start = ...
Instant end = start.plus(Days.days(1).toStandardDuration());
Run Code Online (Sandbox Code Playgroud)


Ton*_*nis 9

我是这样做的:

Date someDate = new Date(); // Or whatever    
Date dayAfter = new Date(someDate.getTime()+(24*60*60*1000));
Run Code Online (Sandbox Code Playgroud)

最后的数学将一天的秒数转换为毫秒.

  • 首先,这并没有考虑日历之类的事情,例如闰年和闰秒以及其他细节,这就是为什么不推荐使用Date()上的等值方法,并且首先存在Calendar和GregorianCalendar.而且你的代码也不能处理夏令时,最好是天真的,每天都有WFF文章和最糟糕的bug. (2认同)