Java中解析日期的通用方法

Java中解析日期的通用方法,java,parsing,date,Java,Parsing,Date,在Java中解析日期的最佳方法是什么?是否有任何内置的方法可以在不事先知道格式的情况下解析字符串,如“2011年7月18日”、“2011年7月18日”、“2011年7月18日”、“2011年7月18日”?如果您熟悉SimpleDataFormat,您只需在列表/数组中添加两个dateformatter,然后一个接一个地执行这些操作,直到找到一个有效的日期 这里的问题是:你怎么处理这样的约会 06-07-2011 是7月6日还是6月7日 但要回答这个问题:并没有“内置通用方式”你们真的不能这么做。

在Java中解析日期的最佳方法是什么?是否有任何内置的方法可以在不事先知道格式的情况下解析字符串,如“2011年7月18日”、“2011年7月18日”、“2011年7月18日”、“2011年7月18日”?如果您熟悉SimpleDataFormat,您只需在列表/数组中添加两个dateformatter,然后一个接一个地执行这些操作,直到找到一个有效的日期

这里的问题是:你怎么处理这样的约会

06-07-2011

是7月6日还是6月7日


但要回答这个问题:并没有“内置通用方式”

你们真的不能这么做。考虑“10-12—2011”。你是指12月10日还是10月12日?您需要制作自己的模式列表以进行尝试。此列表将根据地区以及该国家/地区的人对日期的“预期”解释方式而有所不同。

不太可能。BalusC在上写了一篇精彩的文章,它“解决”了大多数日期格式解析。

您可以使用
DateFormat.parse(…)
并为DateFormat使用区域设置,但这可能无法处理所有这些情况。这也不是那么容易:考虑下面两个可能的日期(相同):<代码> 18 / 07 / 2011 和<代码> 07 /18/2011 < /COD> -如何不知道它是<代码> DD/MM/YYYY < /C>还是<代码> MM/DD/YYYY < /代码>(例如,in)?< /P> < P>这是一个大问题,主要是因为日期是一个模糊的概念——例如2012年1月2日是2月还是1月


您所能做的最好的事情就是收集一堆不同格式的字符串,然后尝试每一个字符串,直到找到匹配的字符串。

标准API库中没有类似的字符串。是一个试图这样做的库,但您应该知道,这只能是一个“尽最大努力”的事情,因为像2012年2月1日这样的事情很模糊:如果没有关于格式的元信息,就不可能决定是2月1日还是1月2日。

使用默认格式DateFormat.MEDIUM和SHORT尝试DateFormat

public static void main(String[] args) {
    // Make a String that has a date in it, with MEDIUM date format
    // and SHORT time format.
    String dateString = "Nov 4, 2003 8:14 PM";

    // Get the default MEDIUM/SHORT DateFormat
    DateFormat format =
        DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.SHORT);

    // Parse the date
    try {
        Date date = format.parse(dateString);
        System.out.println("Original string: " + dateString);
        System.out.println("Parsed date    : " +
             date.toString());
    }
    catch(ParseException pe) {
        System.out.println("ERROR: could not parse date in string \"" +
            dateString + "\"");
    }

在异常情况下,您必须决定下一步要做什么,您可以构建解析尝试的层次结构。 比如:


等等。

单词“parse”意味着句法关系。要“解析”任何有意义的事物,语法是必须的。好的解决方案,但不考虑日期的TZ。format@Emerson莫雷托,OP的问题不包括时区。
SimpleDateFormat df1 = new SimpleDateFormat( "dd/MM/yyyy" );
SimpleDateFormat df2 = new SimpleDateFormat( "dd-MM-yyyy" );

df1.parse(..)
df2.parse(..)