appendix> util> Date | TOPUPPREVNEXT |
Date クラスは、コンストラクタと 日付・時刻の前後関係を判定するメソッドしか提供しません。 日付や時間に関する演算をしたり、年月日・時分秒の設定したり、 値を取得したりするには、 Calendar クラス のメソッドを使います。
Date クラスに設定したり、取り出したりする年月日・時分秒は、整数で次の範囲の値をとります。
値 | 範囲 | 備考 |
---|---|---|
年 | 西暦 | |
月 | 0 〜 11 | 1月 は 0 、2月 が 1、 ... 12月が 11 あるいは、Calendar.JANUARY、Calendar.FEBRUARY、... 等の定数をを使います。 |
日 | 1 〜 31 | |
時 | 0 〜 23 | |
分 | 0 〜 59 | |
秒 | 0 〜 61 | 60 61 はうるう秒のとき |
値が範囲をはずれた場合に、例外を発生させるかそれなりの解釈をするかの選択をしておくことができます。 それなりの解釈では、たとえば1月32日は2月1日になります。
日付や時刻の編集(Date から String)や、 解析 parse (String から Date) のために、 DateFormat クラス が用意されています。
日付や時刻の編集に便利な SimpleDateFormat も用意されています。 DateFormat や SimpleDateFormat がもっている 月や曜日の表示文字列を変更するには、 DateFormatSymbols クラスのメソッドを用います。
例に掲げた実行結果をざっとながめて概観をつかんでください。
java.lang.Object
├ java.util.Date
├ java.text.Format
│ └ java.text.DateFormat
│ └ java.text.SimpleDateFormat
├ java.text.DateFormatSymbols
└ java.util.Calendar
└ java.util.GregorianCalendar
コンストラクタ | 機能 |
---|---|
Date ( ) | 現在の時刻を設定したインスタンスを生成します。 |
Date ( long m ) | 1970年1月1日午前0時(グリニッジ標準時)から m ミリ秒後の時刻を設定したインスタンスを生成します。 |
おもなメソッド | 機能 |
---|---|
boolean after ( Date when ) | 自分自身が、 time より後であれば true、 そうでなければ false 。 |
boolean before( Date when ) | 自分自身が、 when より早い場合 true 、 そうでない場合 false 。 |
int CompareTo ( Object obj ) | obj が Date クラスでなければ ClassCastException が発生。 自分自身が obj と同時刻であれば 0 、 前であれば負の値、 後であれば正の値。 |
boolean equals ( Object obj ) | 自分自身と obj が、ミリ秒単位で同じ時刻であれば true 、 そうでなければ false 。 |
long getTime ( ) | 自分自身を、1970年1月1日 00:00:00.000 GMT からのミリ秒単位の経過時間変換します。 |
編集のスタイルを指定する定数は以下のとおりです。
定数 | 意味 |
---|---|
SHORT | できるだけ短く表現する |
MEDIUM | 中くらいの長さに編集する |
LONG | 長い形式で表現する |
FULL | 完全な形で表現する |
日付や時刻の表現方法は、国や用いる言語によって異なります。
このように ロケール
に影響されるインスタンスは、コンストラクタで新たに生成せずに、
ファクトリメソッドでインスタンスを取得します。
ファクトリメソッド | 返されるフォーマッタ |
---|---|
static DateFormat getInstance ( ) | 日付と時刻ともに、SHORT スタイルの日付/時刻フォーマッタ |
static DateFormat getDateTimeInstance ( ) | デフォルトの日付/時刻フォーマッタ |
static DateFormat getDateTimeInstance (
int date , int time ) |
date と time で日付と時刻のスタイルを指定した日付/時刻フォーマッタ |
static DateFormat getDateTimeInstance (
int date , int time , Locale locale ) |
locale のロケール、 date の日付スタイル、 time の時刻スタイルをもつ日付/時刻フォーマッタ |
static DateFormat getDateInstance ( ) | デフォルトの日付フォーマッタ |
static DateFormat getDateInstance ( date ) | date で指定された日付スタイルの日付フォーマッタ |
static DateFormat getDateInstance (
int date , Locale locale ) |
locale に指定されたロケールで、date で指定された日付スタイルの日付フォーマッタ |
static DateFormat getTimeInstance ( ) | デフォルトの時刻フォーマッタ |
static DateFormat getTimeInstance ( time ) | timeで指定された時刻スタイルの時刻フォーマッタ |
static DateFormat getTimeInstance (
int time , Locale locale ) |
locale に指定されたロケールで、time で指定された時刻スタイルの時刻フォーマッタ |
編集は、format メソッドでおこないます。
メソッド | 機能 |
---|---|
String format ( Date date ) | date を文字列に変換します。 |
解析は、parse メソッドでおこないます。
メソッド | 機能 |
---|---|
Date parse ( String source ) | source の先頭からテキストを解析して Date に変換します。 解析できない時 ParseException がスローされます。 |
void setLenient ( boolean lenient ) | 解析を厳密に行う場合 false 、 できるだけ好意的に解釈したい場合に true を指定します。 デフォルトは true になっています。 |
【例4】 を参照してください。
通常はコンストラクタをつかわず、ファクトリメソッドを使います。 【例5】 参照。
コンストラクタ | 機能 |
---|---|
DateFormatSymbols ( ) | デフォルトのロケールで生成。 |
DateFormatSymbols ( locale l ) | ロケール l に対する DateFormatSymbols インスタンスを生成。 |
取得、設定に関するメソッドは以下のとおりです。
メソッド | 対象文字列 |
---|---|
String[] getAmPmStrings ( ) void setAmPmStrings ( String[] ampm ) |
午前、午後を表現する AM や PM |
String[] getEras ( ) vod setEras ( String [] eras ) |
紀元を表現する AD や BC |
String[] getMonths ( ) void setMonths ( String [] m ) |
月の長い名称。 January February ... |
String[] getShortMonths ( ) void setShortMonths ( String[] m ) |
月の短い名称。 Jan Feb ... |
String[] getShortWeekdays ( ) void setShortWeekdays ( String [] w ) |
週の短い名称。 Sun Mon ... |
String [] getWeekdays ( ) void setWeekdays ( String[] w ) |
週の長い名称。 Sunday Monday ... |
String[] getZoneStrings ( ) void setZoneStrings ( String[] z ) |
タイムゾーン |
日付や時刻を処理するための抽象クラスです。
Date クラスの値を設定したり、整数値で年月日や時分秒を設定し、 月や日を進めたり戻したり、その月の最後の日付けを調べたり、 といったことができます。 ここでは、Calendar クラスでできることを解説したのち、 実装されている子クラス GregorianCalendar のメソッドの一覧を紹介します。
カレンダは、ロケールに左右される他のクラスと同様、 ファクトリメソッドで取得します。 取得したカレンダは、現在の時刻で初期化されています。
フィールドと設定可能な値
フィールド値 | 定数 | 意味 |
---|---|---|
ERA | ユリウス暦の年代。 AD BC | |
YEAR | 年。 | |
MONTH | 月。 | |
JANUARY | MONTH フィールドの値。最初の月を表現。 | |
FEBRUARY | MONTH フィールドの値。2番目の月。 | |
MARCH | MONTH フィールドの値。3番目の月。 | |
APRIL | MONTH フィールドの値。4番目の月。 | |
MAY | MONTH フィールドの値。5番目の月。 | |
JUNE | MONTH フィールドの値。6番目の月。 | |
JULY | MONTH フィールドの値。7番目の月。 | |
AUGUST | MONTH フィールドの値。8番目の月。 | |
SEPTEMBER | MONTH フィールドの値。9番目の月。 | |
OCTOBER | MONTH フィールドの値。10番目の月。 | |
NOVEMBER | MONTH フィールドの値。11番目の月。 | |
DECEMBER | MONTH フィールドの値。12番目の月。 | |
UNDECIMBER | MONTH フィールドの値。13番目の月。 | |
WEEK_OF_YEAR | 年の何週目か。 | |
WEEK_OF_MONTH | 月の何週目か。 | |
DAY_OF_YEAR | 年の何日目か。 | |
DAY_OF_MONTH | 月の何日目か。 | |
DATE | 月の何日目か。 | |
DAY_OF_WEEK | 曜日。 | |
SUNDAY | DAY_OF_WEEK の値。 日曜日。 | |
MONDAY | DAY_OF_WEEK の値。 月曜日。 | |
TUESDAY | DAY_OF_WEEK の値。 火曜日。 | |
WEDNESDAY | DAY_OF_WEEK の値。 水曜日。 | |
THERSDAY | DAY_OF_WEEK の値。 木曜日。 | |
FRIDAY | DAY_OF_WEEK の値。 金曜日。 | |
SATURDAY | DAY_OF_WEEK の値。 土曜日。 | |
DAY_OF_WEEK_IN_MONTH | 当月の何度目の曜日か。 | |
AM_PM | 午前か午後か。 | |
AM | AM_PM の値。 午前。 | |
PM | AM_PM の値。 午前。 | |
HOUR_OF_DAY | 24時間制の時刻。 | |
HOUR | 12時間制の時刻。 | |
MINUTE | 分。 | |
SECOND | 秒。 | |
MILLISECOND | ミリ秒。 | |
ZONE_OFFSET | GMTからのずれ。 ミリ秒単位。 | |
DST_OFFSET | 夏時間のオフセット。 ミリ秒単位。 |
ファクトリメソッド
メソッド | 取得する Calendar |
---|---|
static Calendar getInstance ( ) | デフォルトを取得。 |
static Calendar getInstance ( Locale l ) | ロケール l の Calendar |
static Calendar getInstance ( TimeZone t ) | タイムゾーン t の Calendar |
static Calendar getInstance (
TimeZone t , Locale l ) |
指定されたロケールとタイムゾーンの Calendar |
カレンダを設定するメソッド
フィールドに値を設定した場合、 その都度全フィールドを再計算することはしません。 値を取り出す前に、各フィールドを好きな順に設定することができます。
メソッド | 機能 |
---|---|
void clear ( ) | すべてのフィールドをクリアします。 |
void clear ( int f ) | f で指定されたフィールドをクリアします。 |
void set ( int f , int v ) | f で指定されたフィールドに 値 v を設定します。 |
void set ( int y , int m , int d ) | 年、月、日 を設定します。 |
void set (
int y , int m , int d , int h , int mt ) |
年、月、日、時、分 を設定します。 |
void set (
int y , int m , int d , int h , int mt , int s ) |
年、月、日、時、分、秒 を設定します。 |
void setTime ( Date date ) | カレンダに日付と時刻 date を設定します。 |
void setTimeInMillis ( long m ) | カレンダに ミリ秒 m で表された日付と時刻を設定します。 |
void setFirstDayOfWeek ( int day ) | 週の最初を何曜日にするかを設定します。 |
void setLenient ( boolean b ) | フィールドの値の範囲を厳密にあつかうかどうかを指定します。 フィールドの値が範囲を超えた場合に例外を発生させたければ、 b を false にします。 b を true に設定したカレンダでは、、 たとえば1996年2月942日は、 1996年2月1日から第941日目と解釈されます。 |
void setMinimalDaysInFirstWeek ( int value ) | 年の最初の週に必要な最小日数を設定します。 |
void setTimeZone ( TimeZone t ) | タイムゾーンを t にします。 |
カレンダから値を取り出すメソッド
カレンダから値を取り出す前に、全てのフィールドが再計算されます。 各フィールドの値は定められた範囲におさまっています。
メソッド | 取得される値 |
---|---|
int get ( int f ) | f フィールドの値。 |
Date getTime ( ) | 設定されている日時を Date で表現した値。 |
int getActualMaximun ( int f ) | 設定されている日付に対して、フィールド f が 持ち得る最大値。 |
int getActualMinimun ( int f ) | 設定されている日付に対して、フィールド f が 持ち得る最小値。 |
static Locale[] getAvailableLocales ( ) | カレンダがつかえるロケールのリスト。 |
int getFirstDayOfWeek ( ) | 週の最初の曜日。 |
int getMinimalDaysInFirstWeek ( ) | 年の最初の週に必要な最小日数。 |
TimeZone getTimeZone ( ) | このカレンダのタイムゾーン。 |
abstract int getGratestMinimum ( int f ) |
フィールド f の最小値の上限。 最小値が変化しない場合は、getMinimum ( ) と同じ値。 |
abstract int getLeastMaximun ( ) |
フィールド f の最大値の下限。 |
abstract int getMaximum ( int f ) |
フィールド f の最大値。 |
abstract int getMinimum ( int f ) |
フィールド f の最小値。 |
値を操作するメソッド
メソッド | 機能 |
---|---|
abstract void add ( int f , int v ) |
フィールド f に (符号付の)値 v を加え、
全フィールドの再評価をします。
つまり上位のフィールドに繰り上がる(増えたり減ったりする)可能性があります。
また日付が月末に近い時に月を進めたり戻したりする場合には注意が必要です。
たとえば日付が31日のときに、
小の月に移動させると日がその月の最終日に移動します。
29〜30日のとき、うるう年でない2月に移動しても同じです。
月を get して同じ月数を加えて set すると、翌月の1日(2月ならば、
3月2日か3日)になります。
|
void roll ( int f , boolean up ) | up が true ならば、フィールド f の値を1つ増やし、 そうでなければ 1 減らします。上位のフィールドは変化しません。 そのフィールドの値の範囲を上に超えたら最小値にもどり、 範囲を下にはずれたら最大値に戻ります。 日付が31日のときに月を roll して小の月になると、 日付けは30日になります。さらに大の月に roll しても30日のままです。 |
void roll ( int f , int n ) | フィールド f を n 回 roll する。 (という定義になっていますが、 月末日付で2月をまたがっても28日になったりはしません) |
暦日の処理はやっかいな問題を含んでいます。実際の業務で Javaのカレンダ機能をどこまでうまく使えるか、もうすこし調査が必要です。
実行結果
Date クラスの変数 now に 日付や時刻に関する情報が入っていることが判ります。
現在時刻を次の12種類の書式で編集してみました。
ロケールなし | SHORT形式 | 日付のみ |
ロケールなし | SHORT形式 | 時刻のみ |
ロケールなし | SHORT形式 | 日付と時刻 |
ロケールなし | MEDIUM形式 | 日付と時刻 |
ロケールなし | LONG形式 | 日付と時刻 |
ロケールなし | FULL形式 | 日付と時刻 |
ロケール 英語 | FULL形式 | 日付と時刻 |
ロケール 英国 | FULL形式 | 日付と時刻 |
ロケール 米国 | FULL形式 | 日付と時刻 |
ロケール フランス語 | FULL形式 | 日付と時刻 |
ロケール ドイツ語 | FULL形式 | 日付と時刻 |
ロケール イタリア語 | FULL形式 | 日付と時刻 |
実行結果
ソース・プログラム DateSample2Scan.java
実行結果
文字 | 意味 | 表示 |
---|---|---|
G | 紀元 | (テキスト) |
y | 年 | (数値) |
M | 月 | (テキストか数値) |
d | 日 | (数値) |
h | 時 (1 〜 12) | (数値) |
K | 時 (0 〜 11) | (数値) |
k | 時 (1 〜 24) | (数値) |
H | 時 (0 〜 23) | (数値) |
m | 分 | (数値) |
s | 秒 | (数値) |
S | ミリ秒 | (数値) |
E | 曜日 | (テキスト) |
a | 午前/午後 | (テキスト) |
z | タイムゾーン | (テキスト) |
パターン文字の文字数によって、そのフォーマットが決まります。
パターンの文字が a〜z あるいは A〜Z でない場合は、そのまま編集されます。 アポストロフィ(')でくくられた文字もそのまま埋め込まれて編集されます。 アポストロフィ自体を挿入したいときは、アポストロフィを2個つづけて書きます。
実行結果
実行結果
一定時間ごとに表示を更新するような場合は、タイマ を利用します。
更新日:2006-01-22