2011年6月7日火曜日

Java 時間, 日付の操作(基本編)

こんにちは, 今回は, Java における日付や時間の操作について説明します。
2014/03 時間操作のライブラリをpure JavaでつくりましたAndroid でも使えますJava(Android)時間操作ライブラリ
Java で日付, 時間を扱う場合によく出てくるのは
Date (  java.util.Date ) 型    class
Calendar 型   interface
ではないでしょうか。

SQL系を合わせると,
Date ( java.sql.Date )
TimeStamp
でしょうか。(次回以降に回します)

いろいろな関数の引数そのほかもろもろで利用されるのは, Date型かと思います。
しかし, Date 型の操作には問題があります。

・getYear() ,  getMonth()  などは,  deprecated (非推奨)  になっていて, Date 型のインスタンスから
・欲しい情報が得られない。
日付や時間の計算のメソッドがない。

というわけで, Date 型でつねにデータを持つことはあまり得策ではないことに気づきます。
そこで, 計算の得意な Calendar interface にまかせます。

次は例です。
ex)  現在時刻の取得
Date now = new Date();
Calendar cal = Calendar.getInstance();

上の2つは, 同じ現在の日付, 時刻をとりますがこれを表示したいのですが.....
Date 型は,  身動きできませんが

System.out.println ( "Year" + cal.get(Calendar.YEAR) + " Month" + cal.get(Calendar.MONTH));
などといけるわけです(表示には, SimpleDateFormatを使いましょう)


でも, 何かしらの関数でDate 型が帰ってきたり, Date型を引数に持つ場合はどうすんねん。
Date 型, Calendar 型は, 相互変換が可能です。

1)  Date  →  Calendar
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAYOFMONTH, -3);

cal.setTime(date);   //  これで, date の日付時刻が calに入る

2)  Calendar →  Date
cal.getTime();

というように, 相互変換可能なので, できるだけ Calendar でキープしておいた方が
便利です。

Calendar系のクラスを利用して計算を行います
ex) 計算など
Calendar cal = Calendar.getInstance();     // 現在
cal.add ( Calendar.YEAR, 1);     // 1年プラス
cal.add ( Calendar.MONTH, -1);    // 1か月マイナス
cal.set(Calendar.MINUTE, 5);       // 5分をセット

このように, add や, set で計算をしたりできます。
その後, Date 型に変換したりすればよいでしょう。


次回は, 役に立ちそうなメソッドについて

0 件のコメント:

コメントを投稿