【发布时间】:2010-12-10 15:44:34
【问题描述】:
我有一个带有yyyy-M-d" 模式的 SimpleDateFormat,以及以下场景:
String str = "02-03-04";
SimpleDateFormat f = new SimpleDateFormat("yyyy-M-d");
f.setLenient(false);
System.out.println(f.parse(str));
输出为Sat Mar 04 00:00:00 EST 2
我的目标是只捕获格式为 2004-02-03 的日期并忽略 02-03-04。我认为模式中的 yyyy 需要 4 位数的年份,但显然情况并非如此。谁能解释为什么这不会引发解析异常?我希望它...
【问题讨论】:
-
除了使用更具体的 API 之外,正则表达式也应该可以工作(只需检查它是否匹配,然后使用解析器)。
-
我为这篇文章简化了问题。实际上,我有一堆匹配各种模式的日期格式。事后看来,也许正则表达式(或 JODA 时间)会更好......但这就是我现在所处的位置。
-
如果它正在附加一些东西,那么我真的无法提出比首先使用正则表达式进行验证更好的方法(考虑到日期模式会捕获,每个日期模式编写一个正则表达式应该很容易格式中的其他错误?)。
-
啊!或者您可以使用
set2DigitYearStart将其设置为“不可能”的值,就像将来荒谬的事情(尽管听起来太像 y2k),然后检查它(就像乔恩的回答所暗示的那样)
标签: java simpledateformat