我是新手regex,我只想從下面的字串中匹配最新/上個月,因為我們可以看到只有 202206 應該匹配,并且將來如果有 202207 那么它應該只匹配 202207。為了匹配,經過研究我發現我可以在下面使用regex。但是,問題不是僅匹配最新日期,而是匹配兩個日期。我應該如何讓我regex只匹配最新/上個月的字串?正則運算式中有 if 條件嗎?我也參考了這篇文章。但是,正則運算式適用于 Perl 而不是 Java。我想獲得 Java 的原因是因為我面臨 SO 用戶帖子中提到的類似問題。我的 ETL 工具不同。
提前致謝!
test1-202201
test1-202206
正則運算式
/\d{4}(0[1-9]|1[0-2])/
uj5u.com熱心網友回復:
tl;博士
使用YearMonth類而不是正則運算式。
YearMonth
.now(
ZoneId.of( "Africa/Casablanca" )
)
.isAfter(
YearMonth
.parse( "2022-06" )
)
細節
正如評論所提到的,正則運算式是一個字串比較工具。正則運算式對當前和上個月一無所知。正則運算式非常強大且有趣。但是不要陷入“如果你唯一的工具是錘子,那么每個問題看起來都像釘子”的陷阱。
對于日期時間作業,請使用日期時間類。幸運的是,Java 現在在包中提供了行業領先的日期時間類java.Time,在 JSR 310 中定義。
永遠不要使用java.time包之外的遺留日期時間類。它們很糟糕,是如何不進行面向物件編程的大師班。
一年一個月,使用YearMonth類。
確定當前年月需要時區。對于任何給定的時刻,日期在全球范圍內因區域而異。因此,在本月的月底/月初,日本東京可能是“下個月”,而美國俄亥俄州托萊多可能是“上個月”。
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
YearMonth ym = YearMonth.now( z ) ;
對于文本,使用標準ISO 8601格式:YYYY-MM。
String output = ym.toString() ;
并決議。
YearMonth ym = YearMonth.parse( "2022-06" ) ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491477.html
