我正在尝试以特定的自定义格式解析日期。
2012 年 1 月 25 日星期三 - 下午 12:44:07
像这样..
SimpleDateFormat
我为此创建了一个..
SimpleDateFormat sdf = new SimpleDateFormat("EEEE DD MMM YYYY - HH:MM:SS aa" );
问题是这些日子的文字。它就像 25 日、23 日、02 日一样到来。我对这件事感到异常......
帮助如何克服这个问题。
我正在尝试以特定的自定义格式解析日期。
2012 年 1 月 25 日星期三 - 下午 12:44:07
像这样..
SimpleDateFormat
我为此创建了一个..
SimpleDateFormat sdf = new SimpleDateFormat("EEEE DD MMM YYYY - HH:MM:SS aa" );
问题是这些日子的文字。它就像 25 日、23 日、02 日一样到来。我对这件事感到异常......
帮助如何克服这个问题。
您可以使用这样的正则表达式删除当天的文字。
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);
(忽略语言环境,我来自其他地方:))
您可以将尝试解析的日期字符串拆分为多个部分,并通过以下方式删除有问题的两个字母:
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();
}
您的解析字符串也有一些错误。大小写对于日期和时间字符很重要。请参阅SimpleDateFormat javadoc以获取参考。
您将不得不以某种方式手动执行此操作。
例如一个方法如下:
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);
按照人们在此线程中的说明,将“.th”添加到格式字符串