View Javadoc
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  }