所以我有以下包含日期和时间的字符串,我需要解析
« by username on September 13, 2015, 08:34:02 am »
我有以下表达式似乎在rubular.com
中起作用,但Java只从中收集9月。
我还想有两个小组,日期和时间。我怎么能这样做?
January|February|March|April|May|June|July|August|September|October|November|December| [0-9]{2}, [0-9]{4}, [0-9]{2}:[0-9]{2}:[0-9]{2} am|pm
由于
答案 0 :(得分:3)
可以试试这样的事情
String in = "by username on September 13, 2015, 08:34:02 am";
//date parsing pattern
String s = "MMM d, yyyy, HH:mm:ss aaa";
SimpleDateFormat sdf = new SimpleDateFormat(s, Locale.US);
try {
//pattern to get rid of 'by username on'
String p = "\\w+\\s\\w+\\s\\w+\\s";
Date d = sdf.parse(in.replaceFirst(p, ""));
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
答案 1 :(得分:0)
如果始终以完全相同的格式输入日期,则可以使用如下所示的功能。如果您希望部件之间有更多空格,请添加\s+
(在Java字符串中转义为\\s+
。)
public static Date findAndParseDate(String s) {
Date parsedDate = null;
String patternStr = "((January|February|March|April|May|June|July|August|September|October|November|December) [0-9]{2}, [0-9]{4}, [0-9]{2}:[0-9]{2}:[0-9]{2} am|pm)";
Pattern p = Pattern.compile(patternStr);
Matcher m = p.matcher(s);
if (m.find()) {
String extractedDateTimePart = m.group(1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM dd, yyyy, hh:mm:ss aa");
try {
parsedDate = simpleDateFormat.parse(extractedDateTimePart);
} catch (Exception ex) {
}
}
return parsedDate;
}