如何使用其他文本解析字符串中的日期

时间:2015-08-04 10:19:43

标签: java date

我想在String中解析以下类型的Date,它可以包含之前和之后的其他数据:

例如:foo-bar_2014-10-14_18.56.05_bar 以下DateFormat不起作用:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss", Locale.ENGLISH);
Date result=df.parse(parent.getName());

修改 由于事实,之前和之后的文本可能类似于

  • house_alarm_2014-10-14_18.56.05_fire
  • 轿厢broken_2014-10-14_18.56.05_wheel

我创建了一个与日期匹配的正则表达式。

    String pattern="\\d\\d\\d\\d[-]\\d\\d[-]\\d\\d[_]\\d\\d.\\d\\d.\\d\\d";

2 个答案:

答案 0 :(得分:4)

最初使用正则表达式来找到字符串的正确部分

    String name = "foo-bar_2014-10-14_18.56.05_bar";
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss", Locale.ENGLISH);
    String pattern = "\\d{4}-\\d{2}-\\d{2}_\\d{2}\\.\\d{2}\\.\\d{2}";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(name);
    if (m.find()) {
        System.out.println("Found value: " + m.group(0));
        Date result = df.parse(m.group(0));
        System.out.println("result: " + result);
    } else {
        System.out.println("NO MATCH");
    }       

答案 1 :(得分:0)

由于事先不知道第一部分(在日期之前),我认为您唯一的选择是删除第一个“未知”部分。

由于日期模式的长度不变,因此您始终可以使用最后19个字符。这可能比正则表达式稍微有效,也可能更容易理解。