Java:减去日期的最简单方法

标签 java date datepicker calendar subtraction

我创建了一个类,其中有两个字段需要是日期,start_datedate_passed。我一直在研究在 java 中以 YYYY MM DD 格式设置日期的最佳方法,该格式允许轻松减去日期,并且能够“弥补”日期,例如将来.

我希望它做什么的示例...

library.circulate_book("Chemistry", **start date here**) //actual date or random date
library.pass_book("Chemistry", **Date Passed here**) //random date such as 5 days after start date
int days_had = Date_Passed - start_date

到目前为止,我已经找到了很多使用日历和日期类来格式化日期的方法,但还没有找到一种看起来可行的方法,因为大多数日期最终都是字符串。非常感谢任何建议/小例子!此外,任何指向示例的链接都很棒!

最佳答案

tl;dr

通过加/减天数从一个日期移动到另一个日期。

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 methis 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 to 2015-01-09 in days: 7

关于Java:减去日期的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530011/

相关文章:

java - Jqueryui - Datepicker - 日期范围偏移

php - 如何在 PHP 中将日期 YYYY-MM-DD 转换为纪元

android - 解析日期并将其存储在 SQLite 数据库中

jquery - 两个日期的差异显示在另一个文本框中

jquery - 获取日期选择器的隐藏值

javascript - 如何从日期选择器中排除之前的日期

java - 向 HashSet 输入有意义的相等数据

java - 使用 Jackson 将具有 HashMap 的对象序列化为 JSON 时出现映射异常

java - 在 Rhino 中返回宿主对象

javascript - 如何更改日期选择器内部的日期选择器设置?