检查月份或日期或年份是否在两个日期的范围内
Check if month or day or year is in range of two dates
我有一个字符串过滤器,它只能接受 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 | in range (感谢@Ole V.V 的指正。)
2012-01-05 |在范围内
2020-03-01 |在范围内
2020-04-01 |不在范围内
我正在使用 Java 时间来检查日期是在给定日期之前还是之后,但在我的例子中,我有一个字符串可以是 3 种日期格式中的任何一种。
我能想到的一个解决方案是如果请求是 YYYY,那么只检查它是否在两个日期之间的年份之间。如果请求是 YYYY-MM,则检查它是否介于两个日期的 Year 和 month 之间。等等。但我不确定如何让它发挥作用。
有人可以帮忙解决这个问题吗?
您可以创建自己的方法来检查您的日期是否有效,在您的问题中,您有三种不同的情况,只有年份的日期,或者只有年份和月份的日期,或者完整的日期,在这种情况下,当你想解析唯一的年份时会遇到一个小问题,我可以给你这个解决方案:
public static boolean isValid(String date, Instant start, Instant end) {
LocalDate sld = start.atOffset(ZoneOffset.UTC).toLocalDate();
LocalDate eld = end.atOffset(ZoneOffset.UTC).toLocalDate();
try {
LocalDate ld = LocalDate.parse(date);
return ld.isAfter(sld) && ld.isBefore(eld);
} catch (DateTimeParseException e) {}
try {
YearMonth ym = YearMonth.parse(date);
return ym.isAfter(YearMonth.from(sld)) && ym.isBefore(YearMonth.from(eld));
} catch (DateTimeParseException e) {}
try {
Year y = Year.parse(date);
return y.isAfter(Year.from(sld)) && y.isBefore(Year.from(eld));
} catch (DateTimeParseException e) {}
return false;
}
这是一个
Idemo demo
我有一个字符串过滤器,它只能接受 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 | in range (感谢@Ole V.V 的指正。)
2012-01-05 |在范围内
2020-03-01 |在范围内
2020-04-01 |不在范围内
我正在使用 Java 时间来检查日期是在给定日期之前还是之后,但在我的例子中,我有一个字符串可以是 3 种日期格式中的任何一种。
我能想到的一个解决方案是如果请求是 YYYY,那么只检查它是否在两个日期之间的年份之间。如果请求是 YYYY-MM,则检查它是否介于两个日期的 Year 和 month 之间。等等。但我不确定如何让它发挥作用。
有人可以帮忙解决这个问题吗?
您可以创建自己的方法来检查您的日期是否有效,在您的问题中,您有三种不同的情况,只有年份的日期,或者只有年份和月份的日期,或者完整的日期,在这种情况下,当你想解析唯一的年份时会遇到一个小问题,我可以给你这个解决方案:
public static boolean isValid(String date, Instant start, Instant end) {
LocalDate sld = start.atOffset(ZoneOffset.UTC).toLocalDate();
LocalDate eld = end.atOffset(ZoneOffset.UTC).toLocalDate();
try {
LocalDate ld = LocalDate.parse(date);
return ld.isAfter(sld) && ld.isBefore(eld);
} catch (DateTimeParseException e) {}
try {
YearMonth ym = YearMonth.parse(date);
return ym.isAfter(YearMonth.from(sld)) && ym.isBefore(YearMonth.from(eld));
} catch (DateTimeParseException e) {}
try {
Year y = Year.parse(date);
return y.isAfter(Year.from(sld)) && y.isBefore(Year.from(eld));
} catch (DateTimeParseException e) {}
return false;
}
这是一个 Idemo demo