gpt4 book ai didi

Java 日期格式 : most convenient & elegant way to validate input date against multiple patterns

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:24 24 4
gpt4 key购买 nike

我现在就是这样做的:

......

DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
try{
dateFormat.parse(criteria.getPeriodFrom());
dateFormat.parse(criteria.getPeriodTo());
}
catch{
errors.reject("Incorrect format");
}

......

但是如果我需要针对少数可接受的模式进行验证怎么办(例如“dd.MM.yyyy”、“ddMMyyyy”....)。而且我不想通过 DateFormats 的集合进行任何复制和粘贴或迭代 :) 有很酷的库吗?

最佳答案

只需将循环放在 try/catch block 之外:

boolean success = false;
for (DateFormat candidate : formats) {
try {
candidate.parse(criteria.getPeriodFrom());
candidate.parse(criteria.getPeriodTo());
success = true;
break;
}
catch (ParseException e) {
// Expected... move on
}
}
if (!success) {
errors.reject("Incorrect format");
}

不幸的是,既不是 Java 内置库,也不是通常优秀的 Joda Time有类似 .NET 的 DateTime.TryParseExact 的东西,它可以让你测试解析操作是否有效,没有丑陋的异常:( 请注意,至少 Joda Time 的格式化程序是线程安全的并且不可变。

编辑:我可能错了……显然 DateFormat.parse(String, ParsePosition)仅在失败时返回 null,因此您可以使用:

for (DateFormat candidate : formats) {
if (isValid(candidate, criteria)) {
// whatever
}
}

...
private static boolean isValid(DateFormat format, Criteria criteria) {
return format.parse(criteria.getPeriodFrom(), new ParsePosition(0)) != null &&
format.parse(criteria.getPeriodTo(), new ParsePosition(0)) != null))
}

关于Java 日期格式 : most convenient & elegant way to validate input date against multiple patterns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756041/

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