gpt4 book ai didi

java - 如何使用时间 API 检查字符串是否与日期模式匹配?

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:34 27 4
gpt4 key购买 nike

我的程序正在将输入字符串解析为 LocalDate目的。大多数情况下,字符串看起来像 30.03.2014,但偶尔它看起来像 3/30/2014。根据不同,我需要使用不同的模式来调用 DateTimeFormatter.ofPattern(String pattern)。基本上,在进行解析之前,我需要检查字符串是否与模式 dd.MM.yyyyM/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 时间 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

关于java - 如何使用时间 API 检查字符串是否与日期模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23488721/

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