3

X分/時間/日/週/月/年前のような形式の日付をどのように解析できますか. 私が言及していることを示すいくつかの例を次に示します。

  • 3日前
  • 1分前
  • 2年前

デフォルトのJavaライブラリで簡単にできるとは思いません。私は正しいですか?

4

2 に答える 2

6

CalendarAPIに基づく小さなスニペット。

Pattern p = Pattern.compile("(\\d+)\\s+(.*?)s? ago");

Map<String, Integer> fields = new HashMap<String, Integer>() {{
    put("second", Calendar.SECOND);
    put("minute", Calendar.MINUTE);
    put("hour",   Calendar.HOUR);
    put("day",    Calendar.DATE);
    put("week",   Calendar.WEEK_OF_YEAR);
    put("month",  Calendar.MONTH);
    put("year",   Calendar.YEAR);
}};

String[] tests = {
        "3 days ago",
        "1 minute ago",
        "2 years ago"
};

for (String test : tests) {

    Matcher m = p.matcher(test);

    if (m.matches()) {
        int amount = Integer.parseInt(m.group(1));
        String unit = m.group(2);

        Calendar cal = Calendar.getInstance();
        cal.add(fields.get(unit), -amount);
        System.out.printf("%s: %tF, %<tT%n", test, cal);
    }
}

出力:

3 days ago: 2012-08-18, 09:21:38
1 minute ago: 2012-08-21, 09:20:38
2 years ago: 2010-08-21, 09:21:38
于 2012-08-21T07:04:05.320 に答える
0

実際には、「前」を参照しているコンテキストに依存します。現在の日付からか、指定された日付からかです。

Java API を使用して実現できます。

于 2012-08-21T06:38:30.477 に答える