Calendar

Posted by muchag | Java |
初回投稿:2011-04-09 (土) 0:39:51 | 最終更新:2011-07-14 (木) 16:01:49

Java には、こんな素敵なクラスが用意されている。
多分だけど、相当便利♪

JDK 6 ドキュメント:Calendar

概要

年・月・日・時・分・秒(以後、カレンダー情報)を個別に設定したり取得したり、
その単位で加算したり減算したりすることが出来る。
 

インスタンスの生成

Calendar クラスは abstract (抽象)クラスなので、
インスタンスを生成するには getInstance メソッドを呼び出す。

  1. // 現時点でのカレンダー情報を取得
  2. Calendar calendar = Calendar.getInstance();

現在の日本では グレゴリオ暦(太陽暦)を採用しているため、
自動的に GregorianCalendar クラスのインスタンスが返ってくる。

Calendar クラスは、現在のシステムと国情報に依存するため、
それ次第で他の暦が使われる可能性もある。
 

情報を指定して生成

日本の場合はグレゴリオ暦なので、こんな生成方法もあり。

  1. // 指定した時点でのカレンダー情報を取得
  2. // month は、0 ~ 11 = 1月~12月であることに注意
  3. Calendar calendar = new GregorianCalendar();
  4. Calendar calendar = new GregorianCalendar(int year, int month, int dayOfMonth);
  5. Calendar calendar = new GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute);
  6. Calendar calendar = new GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second);

JDK 6 ドキュメント:GregorianCalendar
 

ロケールやタイムゾーンを指定して生成

また、ロケールやタイムゾーンを指定することもできる。

  1. Calendar calendar = Calendar.getInstance(Locale aLocale) ;
  2. Calendar calendar = Calendar.getInstance(TimeZone zone) ;
  3. Calendar calendar = Calendar.getInstance(TimeZone zone, Locale aLocale) ;
  4.  
  5. Calendar calendar = new GregorianCalendar(Locale aLocale) ;
  6. Calendar calendar = new GregorianCalendar(TimeZone zone) ;
  7. Calendar calendar = new GregorianCalendar(TimeZone zone, Locale aLocale) ;

 

カレンダー情報を取得
個別に取得

Calendar クラスの get メソッドを利用。

  1. Calendar calendar = Calendar.getInstance();
  2. int intYear = calendar.get(Calendar.YEAR); //年を取得
  3. int intMonth = calendar.get(Calendar.MONTH) + 1; //月を取得。0 ~ 11 なので、1月~12月にするために 1 を加える
  4. int intDay = calendar.get(Calendar.DAY_OF_MONTH); //日を取得
  5. int intWeekDay = calendar.get(Calendar.DAY_OF_WEEK); //曜日を取得。1(月)~ 7(日)
  6.  
  7. int intHour = calendar.get(Calendar.HOUR_OF_DAY); //時間を取得
  8. int intMinute = calendar.get(Calendar.MINUTE); //分を取得
  9. int intSecond = calendar.get(Calendar.SECOND); //秒を取得

int get(int field)

JDK 6 ドキュメント:get

 

Date オブジェクトとして取得
  1. Calendar calendar = Calendar.getInstance();
  2. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  3. System.out.printIn( sdf.format( calendar.getTime() ) );

Date getTime()

JDK 6 ドキュメント:getTime

SimpleDateFormat
 

カレンダー情報を設定

Calendar クラスの set メソッドを利用。
 

個別に設定
  1. Calendar calendar = Calendar.getInstance();
  2. calendar.set(Calendar.YEAR, 2011); //年を設定

void set(int field, int value)

JDK 6 ドキュメント:set

 

まとめて設定
  1. Calendar calendar = Calendar.getInstance();
  2. calendar.set(2011, 3, 19); // 2011-04-19 の場合

void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)

JDK 6 ドキュメント:set

 

引数 int year

Date オブジェクトの場合、年の引数に与えるのは、実際の年 – 1900 であったが
Calendar オブジェクトの場合は、実際の年をそのまま を与える。
 

和暦を利用する

日本においてでも、普通に Calendar クラスを利用すれば
GregorianCalendar クラスのオブジェクトが返ってきてしまう。

ところが J2SE6 より、JapaneseImperialCalendar クラスが導入され
ロケールを設定することにより、和暦を利用できるようになった。
(パッケージプライベートクラスはリファレンスには載らないのかしら・・・)

そこで前述のロケール設定を利用して

  1. Calendar calendar = Calendar.getInstance( new Locale("ja", "JP", "JP") );

このようにインスタンスを生成する
つまり、ロケールを ja_JP ではなく、ja_JP_JP としてやることで
和暦を利用できるようになる。

和暦のフィールドは ERA 。
フォーマット記述子は G 。

元号 ERA の値 GGGG G
明治以前 0
明治 1 明治 M
大正 2 大正 T
昭和 3 昭和 S
平成 4 平成 H

 
<参考元サイト>
ひしだまのコンピューター関連技術メモ:Java 日付時刻・カレンダー java.util.Calendar
Java SE 6 じゃじゃ馬ならし:官公庁向けでも大丈夫 – 和暦

Posted by muchag | Java |
初回投稿:2011-04-09 (土) 0:39:51 | 最終更新:2011-07-14 (木) 16:01:49

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment