カレンダー「Calendar」とは?
カレンダーは、セットした日時の「1970年1月1日00:00:00 GMT からの経過時間」をミリ秒で取得することができるクラスです。またその逆に、取得したりセットした特定日時のミリ秒から年月日や時間を取得することも可能です。
<基本的な使い方>
① カレンダーを生成してインスタンス化
インスタンス化した時点で calendar には「現在時間」がセットされます。
Calendar calendar = Calendar.getInstance();
② カレンダーに任意の日時をセット
calendar.setTimeInMillis(System.currentIimeMillis()); //システムの現在時間をセット
calendar.set(2019,5,5,8,0,15); //年月日時分秒をセット
calendar.set(2020,6,20,19,30); //年月日時分をセット
calendar.set(2001,3,10); //年月日をセット
③ カレンダーの操作
calendar.add(Calendar.YEAR,5); //カレンダーを5年進める
calendar.add(Calendar.DATE,-20); //20日前に戻す
calendar.add(12,8); //8分進める
calendar.add(4,1); //1週間(7日)進める
add() で操作できる主な日時設定
int | カレンダーフィールド | 備考 |
1 | Calendar.YEAR | 年 |
2 | Calendar.MONTH | 月 |
5 | Calendar.DATE | 日 |
4 | Calendar.WEEK_OF_MONTH | 週 |
7 | Calendar.DAY_OF_WEEK | 曜日 |
11 | Calendar.HOUR_OF_DAY | 時 |
12 | Calendar.MINUTE | 分 |
13 | Calendar.SECOND | 秒 |
14 | Calendar.MILLISECOND | ミリ秒 |
④ 値を取得する
カレンダーオブジェクトから値を取得するには get() メソッドを利用します。
int value = calender.get(1); //「年」を取得
int value = calender.get(Calendar.YEAR); //「年」を取得
get() で取得できる値
取得内容 |
int | 取得方法 | 取得できる値 |
年 | 1 | get(Calendar.YEAR) | 整数4桁 |
月 | 2 | get(Calendar.MONTH) | 0~11 |
日 | 5 | get(Calendar.DATE) | 1~31 |
時 | 11 10 |
get(Calendar.HOUR_OF_DAY) get(Calendar.HOUR) |
0~23 0~11 |
分 | 12 | get(Calendar.MINUTE) | 0~59 |
秒 | 13 | get(Calendar.SECOND) | 0~59 |
ミリ秒 | 14 | get(Calendar.MILLISECOND) | 整数3桁 |
その他の値も取得することができます。
取得内容 | 記述方法 | 取得結果 |
Date | getTime() | Sat Mar 09 07:46:29 GMT 2019 |
TimeZone | getTimeZone() | .getId → "GMT" .getDisplayName → "Greenwich Mean Time" |
long | getTimeInMillis() | 1552118677691(整数13桁) |
サンプル
現在から東京オリンピックが開催される「2020年7月24日」までの日数を計算するサンプルです。
Calendar calendar = Calendar.getInstance(); //カレンダーを生成
calendar.setTimeInMillis(System.currentTimeMillis(); //システム時間をセット
long genzai = calendar.getTimeInMillis(); //ミリ秒で取得
calendar.set(2020,7,24); //年月日をセット
long mirai = calendar.getTimeInMillis(); //未来の日時をミリ秒で取得
long diff = mirai - genzai; //未来と現在の時間差をミリ秒で計算
long nissu = diff / (1000 * 60 * 60 * 24); //ミリ秒を日数に変換
備考・その他
カレンダーについてのより詳しい解説は公式開発サイトを参照ください。
END