gpt4 book ai didi

java - 如何防止 FastDateFormat 模式 "yyyy-MM-dd"解析格式为 "dd-MM-yyyy"的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:12 26 4
gpt4 key购买 nike

我有两个用于日期解析的格式字符串:“yyyy-MM-dd”和“dd-MM-yyyy”,我希望 FastDateFormat 类能够区分这两者,以便通过 ParseException另一个会起作用。然而,这两种格式都解析相同的字符串值,其中一个显然被正确解析,而另一个则没有。

我的测试代码显示:

Parsed: "2014-06-06" into Fri Jun 06 00:00:00 EDT 2014 using "yyyy-MM-dd"
Parsed: "2014-06-06" into Sat Dec 05 00:00:00 EST 11 using "dd-MM-yyyy"
Parsed: "06-06-2014" into Sat Dec 05 00:00:00 EST 11 using "yyyy-MM-dd"
Parsed: "06-06-2014" into Fri Jun 06 00:00:00 EDT 2014 using "dd-MM-yyyy"

有什么简单的方法可以让 FastDateFormat 根据模式正确处理 4 位数年份吗?”我在 FastDateFormat 上没有看到任何宽松的设置。

最佳答案

我可以用 Apache-Common-Lang-library 重现你的结果.似乎该 API 没有提供任何官方解决方案,在最新版本 v3.3.2 中也没有。通常一个好的解析器会通过抛出异常来拒绝模式 dd-MM-yyyy 的输入 2014-06-06 但这里 FastDateFormat 容忍它并且甚至不能像 那样设置为非宽松模式>简单日期格式

所以剩下的唯一选择是:

a) 自己动手(类似于下面的代码示例):

public class ParserDDMMYYYY extends FastDateFormat {
public static final INSTANCE =
new ParserDDMMYYYY("dd-MM-yyyy", TimeZone.getDefault(), Locale.getDefault());

@Override
public Date parse(String input) throws ParseException {
if (input.charAt(4) == '-') {
throw new ParseException("Invalid format: " + input, 0);
}
return super.parse(input);
}

// ... more overrides of similar parse methods
}

防止模式 yyyy-MM-dd 的 dd-MM-yyyy 的情况非常相似。

b) 或者您更改日期时间库,因为至少有三个更好的库用于日期时间处理和格式化。请记住,apache-library 仍然基于旧的 java.util.*- 和 java.text.*-packages.

我也怀疑类 FastDateFormat 是否真的在性能上好得多,与其他日期时间库的不可变版本相比肯定不会更好。例如,我在 apache 库中看到了一些 synchronized-keywords(潜在的锁竞争,不是那么现代)。

关于java - 如何防止 FastDateFormat 模式 "yyyy-MM-dd"解析格式为 "dd-MM-yyyy"的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108458/

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