tl;博士
通过加/减天数从一个日期移动到另一个日期。
LocalDate.now(
ZoneId.of( "Pacific/Auckland" )
)
.minusDays( 5 )
计算两个日期之间经过的天数、月数和年数。
ChronoUnit.DAYS.between( start , stop )
解析
首先,您必须将字符串输入解析为日期时间对象。然后,您可以使用这些对象来构建您的 business logic。
不要将日期时间值视为字符串,这会让你发疯。我们在代码中使用日期时间对象;我们使用该日期时间对象的字符串表示形式与用户或其他应用交换数据。
在 Java 8 及更高版本中,使用 java.time 框架。见Tutorial。
您只需要一个日期,没有时间,所以我们可以使用LocalDate 类。
那个时髦的双冒号语法是method reference,表示其他代码应该调用什么方法。
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 上已多次解决此问题。例如,How to subtract X days from a date using Java calendar?。有关详细信息,请参阅this one by me 和this one by me 等其他答案以获取更多详细信息。提示:“elapsed”是关键词。
使用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 );
localDate:2015-01-02 到 2015-01-09 天数:7