gpt4 book ai didi

java - 检查月、日或年是否在字符串格式的两个日期范围内

转载 作者:行者123 更新时间:2023-12-02 07:47:38 24 4
gpt4 key购买 nike

I originally asked this question here with a different use case但现在我意识到我可以有更多关于这个问题的案例。

我有一个字符串过滤器,只能接受 3 种日期格式 - YYYY , YYYY-MM , YYYY-MM-DD .

我想检查请求的字符串是否在两个字符串值日期的范围内。

假设我有两个日期字符串,可以采用上述 3 种日期格式中的任何一种

<小时/>

用例 1

开始日期:2010-05-15 & 结束日期:2020-05

以下所有requested String 结果在范围内:

2010 , 2020 , 2010-05 , 2020-05 , 2020-05-22 , 2010-05-15 , 2010-05-22 , 2015-02-25

所有requested String以下不在范围内

2009 , 2021 , 2010-04 , 2020-06 , 2010-05-14 , 2020-06-01

<小时/>

用例 2

开始日期:2010 & 结束日期:2020-05-15

以下所有值均在范围内结果:

2010 , 2020 , 2010-05 , 2020-05 , 2010-05-22 , 2010-01-01 , 2020-05-15 , 2015-02-25

下面的所有值都不在范围内

2009 , 2021 , 2020-06 , 2020-05-16 , 2020-06-01

<小时/>

用例 3

开始日期:NULL & 结束日期:2020-05

2020-05-31之前的所有请求日期在结果范围内:

2020-05-31之后的所有值不在范围内。

<小时/>

用例 4

开始日期:2010-05-15 & 结束日期:NULL

2010-05-15之后所有请求的日期 结果在范围内:

2010-05-15之前的所有值不在范围内。

<小时/>

我使用 Java 时间来检查日期是否在给定日期之前或之后,但就我而言,我有一个字符串作为请求日期、开始日期和结束日期,可以是 3 个日期中的任何一个-格式。

我不确定这是否是一个有效的解决方案,但这就是我的想法

只需将所有日期(请求的日期、开始日期和结束日期)分解为数字,然后将请求的年份与开始和结束的年份进行比较,如果请求日期中的月份可用,并且在开始和结束时也可用,然后比较月份是否为在范围内,日期也相同。

有人可以帮忙解决这个问题吗?

最佳答案

将所有字符串输入转换为 LocalDate 对象

停止用字符串来思考。这些字符串仅用于用户界面和将值序列化到存储。当您的应用程序运行时,您应该最终使用对象、java.time 对象、LocalDate 来执行逻辑。

将所有输入转换为LocalDate

检查输入的长度。

if( input.length() = 4 ) {…}

如果输入长度为4个字符,则解析为Year 。如果错误的输入通过了过滤器,则抛出异常陷阱。从年份开始,通过调用 atDay 获取 LocalDate .

try{
Year year = Year.parse( "2020" ) ;
LocalDate ld = year.atDay( 1 ) ;
} catch ( DateTimeParseException e ) {

}

如果输入是七个字符,则解析为 YearMonth。通过 atDay 方法获取 LocalDate 的表单。

try{
YearMonth YearMonth = YearMonth.parse( "2020-05" ) ;
LocalDate ld = yearMonth.atDay( 1 ) ;
} catch ( DateTimeParseException e ) {

}

如果输入为 10 个字符,则解析为 LocalDate

try{
LocalDate localDate = LocalDate.parse( "2020-05-23" ) ;
} catch ( DateTimeParseException e ) {

}

将所有 LocalDate 对象放置到位后,进行比较。在定义时间跨度时始终使用半开放方法。开头是包含,而结尾是排除

提示:“不早于”是询问“等于或晚于”的更简短方式。

( ! target.isBefore( start ) ) && target.isBefore( stop ) 

关于java - 检查月、日或年是否在字符串格式的两个日期范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59884401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com