tl;博士
通过添加/减去天数从一个日期移动到另一个日期。
LocalDate.now(
ZoneId.of( "Pacific/Auckland" )
)
.minusDays( 5 )
计算两个日期之间经过的天数、月数和年数。
ChronoUnit.DAYS.between( start , stop )
解析
首先,必须将字符串输入解析为日期时间对象。然后,您可以使用这些对象预制业务逻辑。
不要再将日期时间值视为字符串,这会让你发疯。我们在代码中使用日期时间对象;我们使用该日期时间对象的字符串表示形式与用户或其他应用程序交换数据。
在 Java 8 及更高版本中,请使用 java.time 框架。请参阅教程。
您只需要一个日期,而不需要一天中的时间,因此我们可以使用 LocalDate
类。
这种时髦的双冒号语法是一种方法参考,一种说其他代码应该调用什么方法的方法。
String input = "2015 01 02";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyyy MM dd" );
LocalDate localDate = formatter.parse ( input , LocalDate :: from );
当前日期
确定今天的日期需要一个时区。在任何给定的时刻,日期在全球范围内因区域而异。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate todayTunis = LocalDate.now( z ) ;
如果需要 JVM 的当前默认时区,请调用 。ZoneId.systemDefault
减去日期
这个问题在 StackOveflow.com 之前已经解决过很多次了。例如,如何使用Java日历从日期中减去X天?有关详细信息,请参阅其他答案,例如我的这个答案和我的这个答案以获取更多详细信息。提示:“已用”是一个关键搜索词。
使用 ChronoUnit.DAYS
枚举计算已用天数。
LocalDate weekLater = localDate.plusDays ( 7 );
long daysElapsed = java.time.temporal.ChronoUnit.DAYS.between( todayTunis , weekLater ) ;
转储到控制台。
System.out.println ( "localDate: " + localDate + " to " + weekLater + " in days: " + daysElapsed );
本地日期: 2015-01-02 至 2015-01-09 在天: 7