gpt4 book ai didi

java - 在 Java 中验证包含 & 或 $ 的日期

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

我惊讶地发现,当使用 DateFormat.parse()DateFormat.SHORT。例如,"08/01/20&&" 将解析为 "Sat Aug 01 00:00:00 EDT 2020"

更令我惊讶的是,我无法通过谷歌搜索该问题。

练习是解析和验证日期。我们可以扫描我们正在解析的字符串中的特殊字符,但这似乎不够优雅。

有人有什么建议吗?

public static void main(String[] args) {
String s = "08/01/20&&";
Date value = null;
try {
value = getDateFormat().parse(s);
} catch (ParseException pe) {
System.out.println("' must be a valid date in the form 'mm/dd/yyyy'");
}
System.out.println("Value:" + value);
}

public static DateFormat getDateFormat() {
DateFormat formatDate = null;
if (formatDate == null) {
formatDate = DateFormat.getDateInstance(DateFormat.SHORT);
//or at least in English locale
//formatDate = DateFormat.getDateInstance(DateFormat.SHORT,Locale.ENGLISH);
formatDate.setLenient(false);
}
return formatDate;
}

最佳答案

DateFormat.getDateInstance 返回的DateFormat 是一个SimpleDateFormat

formatDate instanceof SimpleDateFormat => true

根据 SimpleDateFormat 中的 toPattern() 方法,模式(在 Locale.US 中)是 M/d/yy

parse 方法似乎不会考虑超出日期模式的尾随文本。 s 的以下值将生成 Sat Aug 01 00:00:00 PDT 2020 而不会引发异常。对于格式字符 yy20 被解释为 2020,尾随文本似乎被忽略。

"08/01/20"
"08/01/20&&"
"08/01/20**"
"08/01/20..."
"08/01/20ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Javadocs for DateFormat.parse状态:

Parses text from the beginning of the given string to produce a date. The method may not use the entire text of the given string.

它肯定不会解析整个字符串。此外,您使用的 & 字符没有什么特别之处,除了它们是无关紧要的。

您可以获取模式的长度,然后将其与输入字符串的长度进行比较,以查看是否存在无关字符。这适用于 DateFormat.SHORT,因为预期的字符数最多为 8。

关于java - 在 Java 中验证包含 & 或 $ 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464935/

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