Era.java
package com.github.mygreen.cellformatter.lang;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 時代情報の定義用のクラス。
* <p>複数の期間{@link EraPeriod}を持つ。
*
* @version 0.6
* @since 0.5
* @author T.TSUCHIE
*
*/
public class Era {
/**
* 不明な時代情報の場合
* <p>ロケールに対して時代情報が存在しない場合に使用する。
*/
public static final Era UNKNOWN_ERA = new Era(Collections.<EraPeriod>emptyList()) {
@Override
public boolean isUnkndown() {
return true;
}
};
private final List<EraPeriod> periods;
/**
* 時代の期間を指定するコンストラクタ。
* @param periods 時代の期限。
* @throws IllegalArgumentException {@literal periods == null.}
*/
public Era(final List<EraPeriod> periods) {
ArgUtils.notNull(periods, "periods");
this.periods = Collections.unmodifiableList(periods);
}
/**
* 指定した日時が時代情報に含まれているかどうか。
* @param date 判定対象の日時。タイムゾーンは、{@literal GMT-00:00}である必要がある。
* @return true:含まれている場合。
* @throws IllegalArgumentException {@literal date == null.}
*/
public boolean contains(final Date date) {
ArgUtils.notNull(date, "date");
for(EraPeriod period : periods) {
if(period.contains(date)) {
return true;
}
}
return false;
}
/**
* 指定した日時に該当する期間情報を取得する。
* @param date 判定対象の日時。タイムゾーンは、{@literal GMT-00:00}である必要がある。
* @return 見つからない場合は、存在しない期間を示すクラス{@link EraPeriod#UNKNOWN_PERIOD}のインスタンスを返す。
* @throws IllegalArgumentException {@literal date == null.}
*/
public EraPeriod getTargetPeriod(final Date date) {
ArgUtils.notNull(date, "date");
for(EraPeriod period : periods) {
if(period.contains(date)) {
return period;
}
}
return EraPeriod.UNKNOWN_PERIOD;
}
/**
* 不明な時代情報かどうか。
* @return {@link #UNKNOWN_ERA}のインスタンスの場合、trueを返す。
*/
public boolean isUnkndown() {
return false;
}
}