【发布时间】:2020-01-22 20:08:28
【问题描述】:
我有一个字符串过滤器,只能接受 3 种日期格式 - YYYY、YYYY-MM、YYYY-MM-DD。
我想检查请求的字符串是否在两个日期的范围内。
假设我在记录中有两个日期(即时) - 2010-05-01T00:00:00Z 和 2020-03-01TT23:59:59.999999999Z
然后:
要求的日期 |范围结果
2018 |在范围内
2010 |在范围内
2009 |不在范围内
2018-03 |在范围内
2010-02 |不在范围内
2010-05 |在范围内(感谢@Ole V.V. 的更正)
2012-01-05 |在范围内
2020-03-01 |在范围内
2020-04-01 |不在范围内
我正在使用 Java 时间来检查日期是在给定日期之前还是之后,但在我的情况下,我有一个字符串可以是 3 种日期格式中的任何一种。
我能想到的一个解决方案是,如果请求是 YYYY,那么只检查它是否在两个日期的年份之间。如果请求是 YYYY-MM,则检查它是否在两个日期的年和月之间。等等。但我不知道如何使它工作。
有人可以帮忙解决这个问题吗?
【问题讨论】:
-
查看java.time package,特别是LocalDate、YearMonth 和Year 类。它们都有 isBefore 和 isAfter 方法。
-
我认为您的示例不正确,请确认您的输入输出好吗?
-
顺便说一句……您可能想了解定义时间跨度的半开放方法,其中开始是 inclusive 并且结束是 独家。这消除了您的最后一秒问题。
-
2010 在您的范围内吗?有些年份是,有些不是。那么它的一部分就足够了吗?与 2020-03-01 相同。一天中的一纳秒不是。你说的是不是错误2010-03 |在范围内?该范围直到 2010 年 5 月的某个时间才开始。
-
@AMagic 我建议编辑您的问题并输入正确的信息:)
标签: java date datetime java-time