【问题标题】:Weird date parsing in JavaJava中奇怪的日期解析
【发布时间】:2012-01-23 18:20:31
【问题描述】:

我正在尝试进行日期验证。当用户输入如下内容时:2552533 Jan 2012 1340001 这将被解析为:Wed Sep 03 07:41:00 EDT 9000。这是我的代码:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test;
try {
    test = sdf.parse(dateString);
} catch (Exception e) {
...

这里dateString 是一个字符串,我试图将其解析为日期。如果字符串不是有效日期,例如:552533 Jan 2012 1340001,我希望抛出错误。我做错了什么?

【问题讨论】:

  • 下意识反应:你试过 Joda Time 吗? joda-time.sourceforge.net
  • @Freiheit - 如果有人不使用 JodaTime,它总是值得发布。如果它所产生的差异就像呼吸和溺水一样,那只是一种膝跳反应。

标签: java parsing date


【解决方案1】:

试试这个(在解析实际日期之前):

sdf.setLenient(false);

另见:

【讨论】:

  • 我非常喜欢单线解决方案。感谢您的帮助,它现在按预期工作。
【解决方案2】:

SimpleDateFormat.parse 发生错误时不抛出任何异常,它返回null。来自 javadoc:

 Returns:
     A Date parsed from the string. In case of error, returns null.  
 Throws:
     NullPointerException - if text or pos is null.

所以你可以这样做:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test = sdf.parse(dateString);
if(test == null) {
   // there was an error
}

【讨论】:

    【解决方案3】:

    正如 Tudor 所提到的,SimpleDateFormat 在解析失败时不会抛出异常。一种替代方法是来自 Apache Commons 的 DateUtils.parseDate90 (javadocs) here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多