将java.util.Date增加一天的正确方法是什么。
我在想像
Calendar cal = Calendar.getInstance();
cal.setTime(toDate);
cal.add(Calendar.DATE, 1);
toDate = cal.getTime();
感觉不对。
答案 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中,几乎所有基于时间的类都有一个 .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)
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的答案所示。
链接