gpt4 book ai didi

java - 日期格式验证不适用于 yyyy-MM-dd

转载 作者:行者123 更新时间:2023-11-29 03:01:11 25 4
gpt4 key购买 nike

我想验证格式为 yyyy-MM-dd 的日期。如果我为年份提供两位数字(即 YY 而不是 YYYY),则不会抛出任何异常,并且在解析日期时会将 00 附加到日期时间格式。

我已经添加了 setLenient(false);,但它仍然没有正确验证。

谁能帮我解决这个问题?

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
formatter.setLenient(false);
try {
Date date = (Date)formatter.parse("15-05-30"); //In this line year is getting appened with 00 and becomes 0015
reciptDate = dateFormat.format(date);
} catch (ParseException pe) {
return false;
}

最佳答案

API docs for SimpleDateFormat指定:

For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.

因此,您不能按原样使用 SimpleDateFormat 来执行您想要的验证(请注意,1、2 或 3 位数的年份是有效年份,> 4 位数的年份也是如此,但我认为这超出了问题的范围)。

使用正则表达式验证年份是否正好是 4 位数字应该是微不足道的。

例如:

Pattern pattern = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}");

System.out.println("15-05-30: " + pattern.matcher("15-05-30").matches());
System.out.println("2015-05-30: " + pattern.matcher("2015-05-30").matches());
System.out.println("0015-05-30: " + pattern.matcher("0015-05-30").matches());

输出:

15-05-30: false
2015-05-30: true
0015-05-30: true

关于java - 日期格式验证不适用于 yyyy-MM-dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810837/

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