How to check if string matches date pattern using time API?(如何使用Time API检查字符串是否与日期模式匹配?)
本文介绍了如何使用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检查字符串是否与日期模式匹配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用Time API检查字符串是否与日期模式匹配?
基础教程推荐
猜你喜欢
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01