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
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] にあるように、手軽に日付・時刻を操作できるので、必要に応じて使えるように、知っておきたいライブラリです。
参考サイト
- Joda-Time - IBM developerWorks 日本語版
- Joda-Time - Home
- Overview (Joda-Time 2.8.1 API)
- ここが大変だよJava 8 Date-Time API(1):ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識 (1/5) - @IT
0 件のコメント:
コメントを投稿