1 package com.github.mygreen.cellformatter.lang;
2
3 import java.util.Collections;
4 import java.util.Date;
5 import java.util.List;
6
7 /**
8 * 時代情報の定義用のクラス。
9 * <p>複数の期間{@link EraPeriod}を持つ。
10 *
11 * @version 0.6
12 * @since 0.5
13 * @author T.TSUCHIE
14 *
15 */
16 public class Era {
17
18 /**
19 * 不明な時代情報の場合
20 * <p>ロケールに対して時代情報が存在しない場合に使用する。
21 */
22 public static final Eraatter/lang/Era.html#Era">Era UNKNOWN_ERA = new Era(Collections.<EraPeriod>emptyList()) {
23
24 @Override
25 public boolean isUnkndown() {
26 return true;
27 }
28
29 };
30
31 private final List<EraPeriod> periods;
32
33 /**
34 * 時代の期間を指定するコンストラクタ。
35 * @param periods 時代の期限。
36 * @throws IllegalArgumentException {@literal periods == null.}
37 */
38 public Era(final List<EraPeriod> periods) {
39 ArgUtils.notNull(periods, "periods");
40
41 this.periods = Collections.unmodifiableList(periods);
42 }
43
44 /**
45 * 指定した日時が時代情報に含まれているかどうか。
46 * @param date 判定対象の日時。タイムゾーンは、{@literal GMT-00:00}である必要がある。
47 * @return true:含まれている場合。
48 * @throws IllegalArgumentException {@literal date == null.}
49 */
50 public boolean contains(final Date date) {
51 ArgUtils.notNull(date, "date");
52
53 for(EraPeriod period : periods) {
54 if(period.contains(date)) {
55 return true;
56 }
57 }
58
59 return false;
60 }
61
62 /**
63 * 指定した日時に該当する期間情報を取得する。
64 * @param date 判定対象の日時。タイムゾーンは、{@literal GMT-00:00}である必要がある。
65 * @return 見つからない場合は、存在しない期間を示すクラス{@link EraPeriod#UNKNOWN_PERIOD}のインスタンスを返す。
66 * @throws IllegalArgumentException {@literal date == null.}
67 */
68 public EraPeriod getTargetPeriod(final Date date) {
69 ArgUtils.notNull(date, "date");
70
71 for(EraPeriod period : periods) {
72 if(period.contains(date)) {
73 return period;
74 }
75 }
76
77 return EraPeriod.UNKNOWN_PERIOD;
78 }
79
80 /**
81 * 不明な時代情報かどうか。
82 * @return {@link #UNKNOWN_ERA}のインスタンスの場合、trueを返す。
83 */
84 public boolean isUnkndown() {
85 return false;
86 }
87
88 }