在java中解析自定义数据格式

时间:2012-02-01 18:59:35

标签: java date format parseexception

我正在尝试以特定的自定义格式解析日期。

  

星期三2012年1月25日 - 下午12:44:07

像这样......

我为此创建了SimpleDateFormat ..

SimpleDateFormat sdf = new SimpleDateFormat("EEEE DD MMM YYYY - HH:MM:SS aa" );

问题是这些日子的字面意思。它就像25日,23日,02日一样。我对这件事感到异常......

帮助解决这个问题。

4 个答案:

答案 0 :(得分:3)

您可以使用这样的正则表达式删除当天的文字。

String dateString = "WEDNESDAY 25th JAN 2012 - 12:44:07 PM";
SimpleDateFormat format = new SimpleDateFormat("EEEEEEE dd MMM yyyy - HH:mm:ss aa", new Locale("EN"));
dateString = dateString.replaceAll("(.*[0-9]{1,2})(st|nd|rd|th)(.*)", "$1$3");
Date parsedDate = format.parse(dateString);

System.out.println(parsedDate);

(忽略Locale,我来自其他地方:))

答案 1 :(得分:2)

您可以将您尝试解析的日期字符串拆分为多个部分,并按以下方式删除有问题的两个字母:

String text = "WEDNESDAY 21st JAN 2012 - 12:44:07 PM";
String[] parts = text.split(" ", 3);  // we only need 3 parts. No need splitting more
parts[1] = parts[1].substring(0, 2);
String parseableText = String.format("%s %s %s", parts[0], parts[1], parts[2]);  
SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMM yyyy - hh:mm:ss aa" );

try {
    java.util.Date dt = sdf.parse(parseableText);
} catch (ParseException e) {
    e.printStackTrace();
}

你的解析字符串也有一些错误。案例对于日期和时间ptterns很重要。请参阅SimpleDateFormat javadoc以获取参考。

答案 2 :(得分:1)

您将不得不以某种方式手动执行此操作。

e.g。方法如下:

public static String makeItParseable(String dateStr) {
    if(dateStr.contains("st ")) {
        return dateStr.replace("st ", " ");
    } else if(dateStr.contains("nd ")) {
        return dateStr.replace("nd ", " ");
    } else if(dateStr.contains("rd ")) {
        return dateStr.replace("rd ", " ");
    } else {
        return dateStr.replace("th ", " ");
    }
}

并使用它使输入字符串可解析:

String dateStr = "WEDNESDAY 1st JAN 2012 - 12:44:07 PM";
dateStr = makeItParseable(dateStr);
DateFormat dateFormat = new SimpleDateFormat("EEEE dd MMM yyyy - hh:mm:ss a");
Date date = dateFormat.parse(dateStr);

答案 3 :(得分:0)

将“.th”添加到格式字符串中,遵循人们在此主题中所述的内容

How do you format the day of the month to say "11th", "21st" or "23rd" in Java? (ordinal indicator)