使用正则表达式解析此日期时间字符串

时间:2015-09-19 20:42:09

标签: java regex

所以我有以下包含日期和时间的字符串,我需要解析

« 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

由于

2 个答案:

答案 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;
}