将java.util.Date增加一天

时间:2010-09-28 01:43:29

标签: java date

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

我在想像

        Calendar cal = Calendar.getInstance();
        cal.setTime(toDate);
        cal.add(Calendar.DATE, 1);
        toDate = cal.getTime();

感觉不对。

8 个答案:

答案 0 :(得分:18)

那会有用。

  

感觉不对。

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

答案 1 :(得分:18)

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

Date someDate = new Date(); // Or whatever
Date dayAfter = new Date(someDate.getTime() + TimeUnit.DAYS.toMillis( 1 ));

但是自从找到这个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);

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

答案 2 :(得分:11)

是的,那是对的。 Java Date API经常出错。我建议你试试Joda Time。它会是这样的:

DateTime startDate = ...
DateTime endDate = startDate.plusDays(1);

或:

Instant start = ...
Instant end = start.plus(Days.days(1).toStandardDuration());

答案 3 :(得分:9)

我是这样做的:

Date someDate = new Date(); // Or whatever    
Date dayAfter = new Date(someDate.getTime()+(24*60*60*1000));

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

答案 4 :(得分:3)

如果Java 8或Joda Time不是一个选项,您可以随时选择Apache DateUtils:

DateUtils.addDays(myDate, 1);

答案 5 :(得分:1)

我相信joda time库使得处理日期变得更加干净。

答案 6 :(得分:0)

Date thisDate = new Date(System.currentTimeMillis());

Date dayAfter = new Date(thisDate.getTime() + TimeUnit.DAYS.toMillis( 1 ));

Date dayBefore = new Date(thisDate.getTime() + TimeUnit.DAYS.toMillis( -1 ));

答案 7 :(得分:0)

我正在提供现代答案。

  

感觉不对。

我的建议是,为什么感觉不正确是因为它太冗长了。从概念上说,在日期上增加一天是一件容易的事,并且应该在程序中具有简单的表示形式。这里的问题是Calendar类的不良设计:使用它时,您的代码必须是冗长的。没错,您应该使用设计欠佳的Calendar类。早已过时。使用现代的Java日期和时间API java.time,添加一天很简单,同样在代码中:

    LocalDate toDate = LocalDate.of(2020, Month.FEBRUARY, 28);
    LocalDate nextDate = toDate.plusDays(1);
    System.out.println("Incremented date is " + nextDate);

输出为:

  

增加的日期是2020-02-29

如果您需要的类型与LocalDate不同,其他的java.time类也可以使用plusDays方法,您可以以相同的方式使用它,如Ivin的答案所示。

链接