java - 简单的日期格式解析 2k11 类似的值,应该抛出异常

标签 java validation simpledateformat

我正在尝试使用简单的数据格式验证日期,它会解析奇怪的日期。

 val dateFormat = new SimpleDateFormat("dd MMM, yyyy")
      dateFormat.setLenient(false)
      dateFormat.parse("01 Jan, 2k11")

1 月 1 日星期日 00:00:00 IST 2

快时间:-62104253400000

c日期:公元 2-01-01T00:00:00.000+0530

最佳答案

我开始挖掘 SimpleDateFormat 的源代码,并阅读足够的内容来收集这里似乎发生的事情。发生的情况是,您的年份组件 2k11 被解释为两位数年份(实际上是一位数字,2),并且后面的所有内容都被忽略,因为不属于其中的日期模式。考虑以下产生相同结果的代码:

  DateFormat dateFormat = new SimpleDateFormat("dd MMM, yyyy");
  dateFormat.setLenient(false);
  Date blah = dateFormat.parse("01 Jan, 2 Jon Skeet");
  System.out.println(blah);

打印:

Sun Jan 01 00:00:00 CET 2

如您所见,解释的年份是 2,并且 Jon Skeet 简介被忽略。要准确了解 为什么 SimpleDateFormat 这样做,请阅读源代码。

关于java - 简单的日期格式解析 2k11 类似的值,应该抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005168/

相关文章:

java - 使用 JDK5 进行跟踪

java - 长字符串列上的 Hibernate @Index 错误

java - 如何使用嵌套循环打印 X

jquery - 满足条件时跳过某些字段的验证

java - SimpleDateFormat 到 java.time

java - 如何使弹出窗口居中?

c# - 要验证哪一个? Viewodel、Model、Html、jQuery 还是全部?

java - 简单日期格式解析日期时出错

java - 为什么 SimpleDateFormat.format() 和 SimpleDateFormat.parse() 只设置一个时区却给出不同的时间?

Excel 数据验证数字、字母、数字(大写字母)