我的Date看起来像String,我想解析它。
但是日期可能看起来像许多模式中的一种。
MM/dd/yy
或
HH:mm
或
MM/dd/yy HH:mm
或
MM/dd/yy HHmm
我有代码,可以解析许多模式
public DateTime parseDateTime(final String text)
{
if (StringUtils.isEmpty(text)) return null;
int field = 0;
DateTime dateTime = null;
IllegalArgumentException exception = null;
for (; field < FIELD_COUNT; ++field)
{
if (null != formatters[field])
{
try
{
dateTime = formatters[field].parseDateTime(text);
break;
}
catch (final IllegalArgumentException e)
{
exception = null != exception ? exception : e;
}
}
}
if (dateTime == null)
{
throw exception;
}
return dateTime;
}
formatters[]
是
DateTimeFormatter
你能建议一个不同的方式吗?更简单
答案 0 :(得分:0)
第一个模式不包含空格,也没有冒号。
第二个包含冒号,但没有空格。
第三个包含空格和冒号。
最后一个包含空格,但没有冒号。
因此,使用两个indexOf()
调用,您应该能够确定要应用的模式。
另一种方法是使用字符串的长度,这在所有模式中都是不同的(8,5,14和13)。
答案 1 :(得分:0)
SimpleDateFormat
类可以解析您指定的任何字符串格式的日期。有关格式规则,请参阅javadoc
例如,
try
{
DateFormat df = new SimpleDateFormat("MM/dd/yy HHmm");
Date date = df.parse("03/29/12 2359");
System.out.println(date);
}
catch (ParseException e)
{
e.printStackTrace();
}
因为如果解析了所有格式字段,解析可以忽略尾随字符,从最长/最复杂的字符开始,以最短/最简单的字符结束。拿第一个没有抛出异常的那个。
在你的情况下:
{
new SimpleDateFormat("MM/dd/yy HH:mm"),
new SimpleDateFormat("MM/dd/yy HHmm"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("HH:mm")
}