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