2012年10月26日金曜日

Java日付・時刻

(1). 日付・時刻の操作

Javaで日付・時刻の操作を行う場合は、Calendarクラスを使用します。日付の加算、減算、比較など様々な機能を持っています。Calendarクラスを使用する際は、java.uti.Calendarクラスをインポートする必要があります。

//java.util.Calendarクラスをインポートします。
import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();

//getTimeメソッドで日時を取得し表示しています。
//デフォルトの設定では実行時点の日時が取得されます。
System.out.println(cal1.getTime());
}
}

C:\Java\source\TEST>javac Test.java
 
C:\Java\source\TEST>java Test
Sun Apr 13 15:20:24 JST 2008

【参考】Javaの道:日付・時刻(2.Calendarクラス)


(2). 日付・時刻の設定

任意の日付・時刻を設定する際はsetメソッドを使用します。月を設定する際は、月は0〜11の間で表現されるので設定したい月の-1の値を設定します。

//java.util.Calendarクラスをインポートします。
import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();

//setメソッドで日時に2100年10月5日を設定しています。
cal1.set(2100, 9, 5);

//getTimeメソッドで日時を取得し表示しています。
System.out.println(cal1.getTime());
}
}

C:\Java\source\TEST>javac Test.java
 
C:\Java\source\TEST>java Test
Tue Oct 05 16:20:03 JST 2100  ←2100年10月5日が設定されています。

【参考】Javaの道:日付・時刻(2.Calendarクラス)


(3). 日付・時刻の加算・減算

日付・時刻の加算・減算を行う際は、addメソッドを使用します。addメソッドの第1引数には加減算を行いたい日付・時刻のフィールド(YEAR、DATEなど)、第2引数には加減算を行う値を指定します。加算を行う場合は、1、2などプラスの値を、減算を行いたい場合は-1、-2などマイナスの値を指定します。
フィールドの詳細については、Javaの道:日付・時刻(2.Calendarクラス) もしくはAPIリファレンスを参照してください。

//java.util.Calendarクラスをインポートします。
import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();

//setメソッドで日時に2100年3月1日を設定しています。
cal1.set(2100, 2, 1);

//2100年3月1日から1日減算しています。
cal1.add(Calendar.DATE, -1);
System.out.println(cal1.getTime());

//上記で1日減算した日付に、1日加算し2100年3月1日に戻しています。
cal1.add(Calendar.DATE, 1);
System.out.println(cal1.getTime());
}
}

C:\Java\source\TEST>javac Test.java
 
C:\Java\source\TEST>java Test
Sun Feb 28 16:36:43 JST 2100  ←1日減算し、2100年2月28日が設定されています。
Mon Mar 01 16:36:43 JST 2100  ←1日加算し、2100年3月1日が設定されています。


(4). 日付・時刻の比較

日付・時刻の比較を行う場合は、compareToメソッドを使用します。比較対象がオブジェクトの日時より未来の場合は0未満の値を、過去の場合は0より大きい値を、同じ場合は0を返します。

//java.util.Calendarクラスをインポートします。
import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1、cal2、cal3を生成しています。
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
Calendar cal3 = Calendar.getInstance();

//オブジェクトcal1に2100年3月1日を設定しています。
cal1.set(2100, 2, 1);

//オブジェクトcal2に2100年4月1日を設定しています。
cal2.set(2100, 3, 1);

//オブジェクトcal3に2100年2月1日を設定しています。
cal3.set(2100, 1, 1);

//日時を比較しています。
System.out.println("未来日を比較:" + cal1.compareTo(cal2));
System.out.println("過去日を比較:" + cal1.compareTo(cal3));
}
}

C:\Java\source\TEST>javac Test.java
 
C:\Java\source\TEST>java Test
未来日を比較:-1  ←未来日のため、0未満の値が返されます。
過去日を比較:1  ←過去日のため、0より大きい値が返されます。


(5). 月の末日を取得する方法

月の末日を取得する場合、getActualMaximumメソッドを使用します。getActualMaximumメソッドは、引数に指定されたフィールドが取りうる最大値を返します。そのため、引数に月の日を表すDATEフィールドを指定することにより、月の末日を取得します。

//java.util.Calendarクラスをインポートします。
import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();

//setメソッドで日時に2008年2月1日を設定しています。
cal1.set(2008, 1, 1);

//2008年2月の末日を取得し表示しています。
System.out.println("2008年2月の末日:" +
cal1.getActualMaximum(Calendar.DATE));
}
}

C:\Java\source\TEST>javac Test.java
 
C:\Java\source\TEST>java Test
2008年2月の末日:29


(6). 日付・時刻の表示フォーマット変更

日付・時刻の表示フォーマットを変更する際はSimpleDateFormatクラスを使用します。コンストラクタの引数に表示フォーマットを指定してSimpleDateFormatオブジェクトを生成し、formatメソッドで日付・時刻を該当のフォーマットに変更します。
表示フォーマットは予め用意されているパターン文字で指定します。yyyyは4桁の年をmmは月を表すなど様々なパターン文字が用意されています。 フォーマット内に任意の文字列を入れたい場合は、任意の文字列を' 'で囲みます。(例:yyyy'年'は、2000年を表します。)
 
パターン文字の詳細については、Javaの道:日付・時刻(3.SimpleDateFormatクラス)もしくはAPIリファレンスを参照してください。

import java.util.Date;
import java.text.SimpleDateFormat;

class Test {
public static void main(String[] args) {
Date date1 = new Date();

//引数に表示フォーマットを指定して
//SimpleDateFormatオブジェクトを生成しています。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
//formatメソッドで該当のフォーマットに変更しています。
System.out.println(sdf1.format(date1));
}
}

C:\Java\source\TEST>javac Test.java

C:\Java\source\TEST>java Test
2008年05月06日

【参考】Javaの道:日付・時刻(3.SimpleDateFormatクラス)


(7). 日付・時刻の妥当性をチェックする方法

日付・時刻の妥当性をチェックするためには、Calendarクラスや、SimpleDateFormatクラスに用意されているsetLenientメソッドを使用します。デフォルトの設定では、日付・時刻の妥当性チェックは行われませんが、setLenientメソッドで"false"を設定することで妥当性チェックが行われるようになります。
存在しない日付・時刻が設定されている場合、CalendarクラスではgetTimeメソッド等(SimpleDateFormatクラスではparseメソッド等)を使用した際に例外IllegalArgumentExceptionがスローされます。

import java.util.Calendar;

class Test {
public static void main(String[] args) {
//Calendarクラスのオブジェクトcal1を生成しています。
Calendar cal1 = Calendar.getInstance();

//setLenientメソッドでfalseを設定しています。
cal1.setLenient(false);

//setメソッドで存在しない日付2008年2月30日を設定しています。
cal1.set(2008, 1, 30);

try {
cal1.getTime();
//存在しない日付のため例外がスローされます。
} catch (IllegalArgumentException e) {
System.out.println("存在しない日付です。");
}
}
}

C:\Java\source\TEST>javac Test.java

C:\Java\source\TEST>java Test
存在しない日付です。


(8). 文字列をDate型に変換

文字列をDate型に変換する際はSimpleDateFormatクラスのparseメソッドを使用します。変換したい文字列のフォーマットを指定して、SimpleDateFormatクラスのオブジェクトを生成します。parseメソッドで文字列をDate型に変換します。
フォーマットを指定して、SimpleDateFormatクラスのオブジェクトを生成する方法は、Javaの道:日付・時刻(3.SimpleDateFormatクラス)を参照してください。

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;

class Test {
public static void main(String[] args) {

//フォーマットを指定してSimpleDateFormatクラスのオブジェクトを
//生成しています。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");

//変換する文字列を生成しています。
String str1 = new String("2008年10月1日");

try {
//parseメソッドでDate型に変換します。
Date date1 = sdf1.parse(str1);
//変換できない場合例外がスローされます。
} catch (ParseException e) {
System.out.println("変換できないフォーマットです。");
}

}
}

0 件のコメント:

コメントを投稿