本文介紹了如何使用Time API檢查字符串是否與日期模式匹配?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我的程序正在將輸入字符串解析為LocalDate
對象。在大多數情況下,字符串看起來像30.03.2014
,但偶爾看起來像3/30/2014
。根據具體情況,我需要使用不同的模式來調用DateTimeFormatter.ofPattern(String pattern)
。基本上,在進行解析之前,我需要檢查字符串是否與模式dd.MM.yyyy
或M/dd/yyyy
匹配。
正則表達式方法類似于:
LocalDate date;
if (dateString.matches("^\d?\d/\d{2}/\d{4}$")) {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("M/dd/yyyy"));
} else {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));
}
這是可行的,但在匹配字符串時最好也使用日期模式字符串。
有沒有使用新的Java 8 Time API而不求助于正則表達式匹配來實現這一點的標準方法?我已在文檔中查找DateTimeFormatter
,但未找到任何內容。
推薦答案
好的,我會繼續并將其作為答案發布。一種方法是創建將保存模式的類。
public class Test {
public static void main(String[] args){
MyFormatter format = new MyFormatter("dd.MM.yyyy", "M/dd/yyyy");
LocalDate date = format.parse("3/30/2014"); //2014-03-30
LocalDate date2 = format.parse("30.03.2014"); //2014-03-30
}
}
class MyFormatter {
private final String[] patterns;
public MyFormatter(String... patterns){
this.patterns = patterns;
}
public LocalDate parse(String text){
for(int i = 0; i < patterns.length; i++){
try{
return LocalDate.parse(text, DateTimeFormatter.ofPattern(patterns[i]));
}catch(DateTimeParseException excep){}
}
throw new IllegalArgumentException("Not able to parse the date for all patterns given");
}
}
您可以像@MenoHochschild那樣改進這一點,方法是從您傳入的String
數組直接創建DateTimeFormatter
數組。
另一種方法是使用DateTimeFormatterBuilder
,附加您想要的格式。可能還有其他方法,我沒有深入閱讀文檔:-)
DateTimeFormatter dfs = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
.appendOptional(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
.toFormatter();
LocalDate d = LocalDate.parse("2014-05-14", dfs); //2014-05-14
LocalDate d2 = LocalDate.parse("14.05.2014", dfs); //2014-05-14
這篇關于如何使用Time API檢查字符串是否與日期模式匹配?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,