3 import java.io.IOException;
4 import java.text.DateFormat;
5 import java.text.ParseException;
6 import java.text.SimpleDateFormat;
8 import java.util.regex.Matcher;
9 import java.util.regex.Pattern;
12 * 過去ログ取得時に指定する文字列(日付)をパースするユーティリティクラスです.
15 public final class WayBackTimeParser {
17 private static final Pattern PATTERN_NUMBER = Pattern.compile("^\\d+$");
18 private static final Pattern PATTERN_YYMMDD_HH_MM_SS = Pattern.compile(
19 "^(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)$");
20 private static final Pattern PATTERN_YYMMDD_HH_MM = Pattern.compile(
21 "^(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)\\D+(\\d+)$");
23 private WayBackTimeParser() {
27 * 過去の時点を指定する文字列から、コメント取得フォーマットの"when"に指定する文字列へ変換します.
28 * この文字列は、1970 年 1 月 1 日 00:00:00 GMT からの秒数(一般的なミリ秒ではない)になります.
29 * @param time 時点指定文字列。"YYYY/MM/DD hh:mm:ss", "YYYY/MM/DD hh:mm", 秒数を表す数値,
30 * ただし年月日時分(秒)の区切りは実際には数字以外のどんな文字でも構いません.
33 * @throws IOException パース失敗.
35 public static long parse(String time) throws IOException {
36 final Matcher mNumber = PATTERN_NUMBER.matcher(time);
37 if (mNumber.matches()) {
38 return Long.parseLong(time);
41 final Matcher mHMS = PATTERN_YYMMDD_HH_MM_SS.matcher(time);
44 final DateFormat fmt = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss:");
45 StringBuilder str = new StringBuilder();
46 for (int i = 1; i <= 6; i++) {
47 str.append(mHMS.group(i));
50 final Date date = fmt.parse(str.toString());
51 return date.getTime() / 1000;
52 } catch (ParseException ex) {
53 throw new IOException("Cannot parse wayback time: " + time, ex);
57 final Matcher mHM = PATTERN_YYMMDD_HH_MM.matcher(time);
60 final DateFormat fmt = new SimpleDateFormat("yyyy:MM:dd:HH:mm:");
61 StringBuilder str = new StringBuilder();
62 for (int i = 1; i <= 5; i++) {
63 str.append(mHM.group(i));
66 final Date date = fmt.parse(str.toString());
67 return date.getTime() / 1000;
68 } catch (ParseException ex) {
69 throw new IOException("Cannot parse wayback time: " + time, ex);
73 throw new IOException("Cannot parse wayback time: " + time);