Java > 日時を扱う方法

更新日 2012-05-03
広告

日時を扱う方法を紹介します。

Calendar

Calendarクラスは、Javaで日時を扱う際に、よく利用するクラスです。以下のサンプル CalendarSample を見てみます。

import java.util.Calendar;

public class CalendarSample {
    public static void main(String[] args) {
	Calendar cal = Calendar.getInstance(); // インスタンスの取得
	System.out.println("year    " + cal.get(Calendar.YEAR));
	System.out.println("month   " + cal.get(Calendar.MONTH));
	System.out.println("date    " + cal.get(Calendar.DATE));
	System.out.println("day_of_month    " + cal.get(Calendar.DAY_OF_MONTH));
	System.out.println("hour_of_day     " + cal.get(Calendar.HOUR_OF_DAY));
	System.out.println("hour    " + cal.get(Calendar.HOUR));
	System.out.println("minute  " + cal.get(Calendar.MINUTE));
	System.out.println("second  " + cal.get(Calendar.SECOND));
	System.out.println("msec    " + cal.get(Calendar.MILLISECOND));
	System.out.println();

	cal.clear(); // 日時をクリア
	System.out.println(cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DATE) + 
			   " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
	System.out.println("getTimeInMillis  " + cal.getTimeInMillis());
	System.out.println();

	cal.set(2100, 3, 1, 12, 30, 0); // 2100年4月1日 12時30分00秒を設定
	System.out.println(cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DATE) + 
			   " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
    }
}
これを実行すると、以下のようになります。
$ java CalendarSample 
year    2012
month   4
date    4
day_of_month    4
hour_of_day     16
hour    4
minute  13
second  20
msec    328

1970-0-1 0:0:0
getTimeInMillis  -32400000

2100-3-1 12:30:0
  • getInstanceメソッドで、Calendarクラスのインスタンスを取得できます。このとき、インスタンスは、現在時刻を保持します。
  • getメソッドにCalendarクラスの定数(Calendar.YEARなど)を渡すことで、インスタンスが保持する「年」や「日」を取得できます。
    • 「月」で取得できる値は、0はじまりです。つまり、1月であれば0、2月であれば1、、、となります。
    • HOUR_OF_DAYを利用すると、「時」を、0から23の値で取得できます。HOURを利用すると、0から11の値で取得できます(午前4時と午後4時で、同じ4を取得できます)。
  • clearメソッドを使うと、インスタンスが保持する情報をクリアできます。クリア後の時刻情報は、1970年1月1日0時0分0秒になります。
  • getTimeInMillisメソッドを呼び出すと、インスタンスが保持する時刻情報と、1970年1月1日0時0分0秒(GMT)との時刻差を、ミリ秒で取得できます。
    • 上の実行結果で、getTimeInMillisの結果が -32400000 (-9時間)になっているのは、CalendarSampleを日本標準時(JST)の環境で実行したからです。
  • setメソッドを使うと、インスタンスに時刻情報を設定できます。

Date

Dateは、ある時刻を保存するためのクラス、として利用します。時刻情報を操作したい場合はCalendarクラスを利用しましょう。
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class DateSample {
    public static void main(String[] args) throws Exception {
	Date date = new Date();
	System.out.println("date         " + date);
	System.out.println("date.getTime " + date.getTime());
 
	Thread.sleep(1000);

	// Calenderクラスから取得
	Calendar cal = Calendar.getInstance();
	Date dateFromCal = cal.getTime();
	System.out.println("dateFromCal  " + dateFromCal);

	// ソート
	List<Date> list = new ArrayList<Date>();
	list.add(dateFromCal);
	list.add(date);

	Collections.sort(list);
	System.out.println(list);
   }
}
サンプルDateSampleの実行結果は以下のようになります。
$ java DateSample 
date         Fri May 04 16:39:30 JST 2012
date.getTime 1336117170479
dateFromCal  Fri May 04 16:39:31 JST 2012
[Fri May 04 16:39:30 JST 2012, Fri May 04 16:39:31 JST 2012]
  • 引数なしのコンストラクタにより生成されるDateインスタンスは、現在時刻を保持します。
  • getTimeメソッドは、インスタンスが保持する時刻情報と、1970年1月1日0時0分0秒(GMT)との時刻差を、ミリ秒で取得します。
  • CalendarクラスのgetTimeメソッドは、時刻情報を受け継いだDateインスタンスを生成します。
  • DateクラスはComparableインターフェースを実装しているので、簡単にソートできます。
  • afterメソッドやbeforeメソッドを使うと、2つのDateインスタンスの時刻情報を比較できます。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system