X分/時間/日/週/月/年前のような形式の日付をどのように解析できますか. 私が言及していることを示すいくつかの例を次に示します。
- 3日前
- 1分前
- 2年前
デフォルトのJavaライブラリで簡単にできるとは思いません。私は正しいですか?
X分/時間/日/週/月/年前のような形式の日付をどのように解析できますか. 私が言及していることを示すいくつかの例を次に示します。
デフォルトのJavaライブラリで簡単にできるとは思いません。私は正しいですか?
Calendar
APIに基づく小さなスニペット。
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
実際には、「前」を参照しているコンテキストに依存します。現在の日付からか、指定された日付からかです。
Java API を使用して実現できます。