海色日報でタグ「java」が付けられているもの

 Java Advent Calendar 2011 の9日目を担当する事になりました冨永です。
8月末をもってタイレルシステムズを退社しまして、現在お仕事募集中です。

 今回の記事は去年に引き続きJoda-TImeの紹介です。

 Javaの標準APIでは日付だけ、時間だけを扱う事はできませんが、Joda-TImeでは日付だけ、時間だけを扱う事ができます。
また、日付情報と時間情報から日時情報を作成する事も可能です。

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;


public class JodaSample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 日付のみ
		LocalDate date = new LocalDate();
		System.out.println("date: " + date.toString());
		// 時間のみ
		LocalTime time = new LocalTime();
		System.out.println("time: " + time.toString());
		// 日付情報と時間情報から日時情報を作成
		DateTime datetime = date.toDateTime(time);
		System.out.println("datetime: " + datetime.toString());
	}

}

 出力は下記のようになります。

date: 2011-12-09
time: 14:39:18.913
datetime: 2011-12-09T14:39:18.913+09:00

 日付のみの情報はLocalDate、時間のみの情報はLocalTimeを使います。
LocalDateとLocalTimeはその性質上、TimeZoneと関連付いていないので注意してください。

 Java7では見送られてしまったJoda-Timeを参考にした新しいDate/Time APIがJava8には搭載されるそうなので、楽しみですね。

 お次のJava Advent Calendar 2011は10日目、担当はykubotaさんになります。

Joda-Timeで期間を扱う

| コメント()
 java-jaの末席を汚す冨永和志と申します。 この度は25日分の担当をする事になりました。 よろしくお願い致します。

 堅苦しい挨拶はここまでにしまして、本題に入ります。

 今回の記事で取り扱うJoda-Timeライブラリの概要については、


 を、ご参照ください。

 今回私が書くのは、上記のマイコミジャーナルの記事には書かれていない期間情報の取扱についてです。

 Joda-Timeライブラリで期間情報を扱いたい場合、PeriodとIntervalDurationの2つのクラスがあります。 IntervalDurationは「期間の経過情報」で、Periodは単純に「期間の日時の比較情報」にあたります。

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.Period;


public class JodaSample {

/**
* @param args
*/
public static void main(String[] args) {
DateTime startDT = new DateTime();
DateTime endDT = startDT.plusDays(1).plusMillis(1);
Interval interval = new Interval(startDT, endDT);
Duration duration = interval.toDuration();
System.out.println("duration: " + duration.getMillis());
Period period = interval.toPeriod();
System.out.println("period: " + period.getMillis());
}

}

 上記のコードでは、日時情報を作成し、その日時から1日と1ミリ秒だけ進めた日時情報をもうひとつ作成して、二つの日時情報から期間情報を作成してミリ秒を出力しています。 結果は下記の通りになります。

duration: 86400001
period: 1
 Intervalが経過ミリ秒数を出力したのに対し、Periodは「日時情報におけるミリ秒の単位」の増減値を出力しました。

 Joda-Timeは日時情報を取り扱う際、大変便利で有用なライブラリなのでこれからもっと日本語の情報が増えると良いなと思います。

 さて、次のJava Advent Calendar -ja 2010は26日目、担当はshuji_w6eさんです。

 2011.10.24 追記
 IntervalとDurationを間違えていたので修正。