● FAQ− 2.日付・時刻
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
任意の日付・時刻を設定する際は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日が設定されています。
日付・時刻の加算・減算を行う際は、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日が設定されています。
日付・時刻の比較を行う場合は、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より大きい値が返されます。
月の末日を取得する場合、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
日付・時刻の表示フォーマットを変更する際は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日
日付・時刻の妥当性をチェックするためには、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
存在しない日付です。
文字列を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("変換できないフォーマットです。");
}
}
}
Amazon.co.jp ウィジェット