【问题标题】:apache DateUtils: parsing a date with multiple patternsapache DateUtils:解析具有多种模式的日期
【发布时间】:2014-11-03 11:02:04
【问题描述】:

我想使用DateUtils.parseDate 解析具有不同潜在格式的日期。它似乎使用了第一个解析器,即使它应该检测到23/10/2014 和2014/10/23 之间的区别。

它实际上会解析日期,即使它是错误的,所以我什至无法捕捉到异常。我能怎么做?它是一个错误吗? (commons-lang3-3.3.2)

这是一个代码sn-p

package snippet;

import java.text.ParseException;
import java.util.Date;

import org.apache.commons.lang3.time.DateUtils;

public class TestDateFormat {

    public static void main(String[] args) throws ParseException {

        Date d = DateUtils.parseDate("23/10/2014T12:34:22", 
            new String[] {"yyyy/MM/dd'T'HH:mm:ss",
                "dd/MM/yyyy'T'HH:mm:ss"});

        System.out.println(d);
        //returns Tue Apr 05 12:34:22 CET 29 which is wrong
    }

}

【问题讨论】:

    标签: java parsing date apache-commons


    【解决方案1】:

    你应该使用DateUtils.parseDateStrictly:

    DateUtils#parseDateStrictly

    通过尝试各种不同的方法来解析表示日期的字符串 解析器。

    解析将依次尝试每个解析模式。解析只被视为 如果它解析整个输入字符串,则成功。如果没有解析 模式匹配时,会抛出 ParseException。

    解析器会严格解析 - 它不允许使用日期,例如 “1996 年 2 月 942 日”。

    在内部,它所做的是将DateFormat 的lenient 属性设置为false:DateFormat.html#setLenient

    指定日期/时间解析是否宽松。和 宽松的解析,解析器可以使用启发式来解释输入 与此对象的格式不完全匹配。通过严格的解析, 输入必须匹配此对象的格式。

    例子:

       public static void main(String[] args) throws ParseException {
          Date d = DateUtils.parseDateStrictly("23/10/2014T12:34:22", 
              new String[] {"yyyy/MM/dd'T'HH:mm:ss",
                  "dd/MM/yyyy'T'HH:mm:ss"});
    
          System.out.println(d);
      }
    

    【讨论】:

    • parseDateStrictly() 不解析格式“MM/dd/yyyy:hh:mm:ss”的任何原因。虽然 parseDate() 适用于格式“MM/dd/yyyy:hh:mm:ss”。
    • @b22 确实如此。此代码工作正常System.out.println(DateUtils.parseDateStrictly("04/05/2003:10:15:16", "MM/dd/yyyy:hh:mm:ss"));。我认为这是输入数据的问题。请注意,h 表示“上午/下午 (1-12) 小时”。如果它不适合您,那么您可以打开一个新问题来解释您的问题。
    • 是的,我后来明白了,我以 24 时钟格式传递时间,我应该使用 HH 而不是 hh,这就是它不起作用的原因。谢谢
    猜你喜欢
    • 2013-01-09
    • 2020-09-14
    • 2018-02-07
    • 1970-01-01
    • 2020-07-04
    • 2019-06-13
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多