DateUtils.java

/*
 * Date Utilities
 * (ISO8601)
 *
 * License : The MIT License
 * Copyright(c) 2011 olyutorskii
 */

package jp.sourceforge.jindolf.corelib;

import java.time.Instant;
import java.time.ZonedDateTime;
import java.time.format.DateTimeParseException;

/*
 * ※ v1.207.10を境に、正規表現によるISO8601時刻表記文字列のパースと、
 * {@link java.util.GregorianCalendar}によるエポックミリ秒変換を改め、
 * JDK8から実装されたjava.time APIを利用することにした。
 */

/**
 * 日付ユーティリティ。
 *
 * <p>ISO8601による時刻表記を解析する。
 */
final class DateUtils{

    /**
     * 隠しコンストラクタ。
     */
    private DateUtils(){
        assert false;
        return;
    }


    /**
     * ISO8601形式の日付をエポック秒msに変換する。
     * JRE1.6 の {@link javax.xml.bind.DatatypeConverter} 代替品
     *
     * @param date ISO8601形式の日付文字列
     * @return エポック秒ms
     * @throws IllegalArgumentException 形式が変な場合。
     */
    public static long parseISO8601(CharSequence date)
            throws IllegalArgumentException {
        ZonedDateTime zdt;
        try {
            zdt = ZonedDateTime.parse(date);
        } catch(DateTimeParseException e) {
            throw new IllegalArgumentException(e);
        }

        Instant ins = zdt.toInstant();

        long result = ins.toEpochMilli();
        return result;
    }

}