2015-07-11

Joda-Time 〜 時刻・日付を簡単操作

Java で、ちょっとしたことで日付・時刻を扱う時に、手軽に使える API がないかといつも感じていました。Java 8 になって、新しい Date and Time API が導入されましたが、残念ながら未だに使えるようになっていません。そんな時に、Joda-Time というライブラリを見つけました。日付や時刻を手軽に扱え、ほんのちょっとしたことに使うのにぴったりでした。このライブラリはオープンソースプロジェクトとして開発されており、Apache 2.0 licence の下で配布されています。

日付や時刻の文字列を、DateTime オブジェクトにして、それを時間(ミリ秒)の整数値に変換するだけの簡単なサンプルを以下に示します、

動作環境は次の通りです。

  • OS: Fedora 22 x86_64
  • java-1.8.0-openjdk-1.8.0.45-40.b14.fc22.x86_64
  • eclipse-platform-4.4.2-6.fc22.x86_64 (LUNA)
  • joda-time-2.8.1
リスト:JodaDateTimeTest.java 
package datetimetest01;

import java.util.Locale;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

class JodaDateTimeTest {
    public static void main(String[] args) {
        String dtStr = " (December 11; 2014 4:16:27 pm)";
        DateTimeFormatter fmt = DateTimeFormat.forPattern("' ('MMMMM dd';' yyyy hh:mm:ss a')'").withLocale(Locale.ENGLISH);
        DateTime dt = fmt.parseDateTime(dtStr);
        System.out.println(dt);
        System.out.println(dt.getMillis());
    }
}

日付・時刻の表記はロケールに依存しますので、異なるシステムで、同じ処理から同じ結果を得るためには、ロケールを固定(この例では Locale.ENGLISH)しておいた方が無難です。

実行例

2014-12-11T16:16:27.000+09:00
1418282187000

今回、日付・時刻を扱う必要に迫られたのは、ほんの些細なことで、下記のような Nebula Visualization の XYGraph で X 軸を時間軸としたチャートを作るためでした。

" (December 11; 2014 4:16:27 pm)" のような文字列から日付・時刻オブジェクトへ変換する必要があり、SimpledateFormat クラスを使う以外にもっと簡単な方法がないか探していたところ、Joda-time ライブラリを見つけたので試してみました。ですので、変換処理が格段に楽になったという訳ではないのです。

また、アプリケーションで Nebula Project のウィジェットを使う限り、カレンダー操作などで Date オブジェクトが必要となるので、Joda-time へ完全に切り替えることは難しいかもしれません。

それでも、参考サイト [1] にあるように、手軽に日付・時刻を操作できるので、必要に応じて使えるように、知っておきたいライブラリです。

参考サイト

  1. Joda-Time - IBM developerWorks 日本語版
  2. Joda-Time - Home
  3. Overview (Joda-Time 2.8.1 API)
  4. ここが大変だよJava 8 Date-Time API(1):ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識 (1/5) - @IT

 

0 件のコメント: