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 まで。