Javaの日付の扱いにうんざりしている人はJodaTimeをつかうといいよ
まあ表題のとおりなんですがJavaの標準でついているjava.util.Dateが非推奨メソッドの嵐で、日付オブジェクトからYear取りたいだけなのに、Calendarへ変換してさらに、凄く面倒くさい引数とかつけて取得しなくてはいけなくて正直うんざりしていました。歴史的背景はこのブログに書いてあったんでなんとなく察しましたが現在使っている人からすれば知るかという話ですし、無駄な苦労をしたくないなと思って誰かがこう思ってなんか対策してるだろうというのぞみをかけて調べていたらjoda-timeがでてきました。
とりあえず基本的な使い方を逆引き的にめもっとこうかと思いました。
install
テスト的に使いたい場合
http://sourceforge.net/projects/joda-time/files/joda-time/2.0/
ここにあるのでここからtar.gzを落としてきます。
mkdir -p ~/local/work/java/jodatime tar zxvf joda-time-2.0-dist.tar.gz cp joda-time-2.0/joda-time-2.0.jar ~/local/work/java/jodatime
生成
1 import org.joda.time.DateTime; 2 3 public class Main { 4 public static void main(String[] args) { 5 DateTime dt = new DateTime(); 6 System.out.println(dt); 7 } 8 }
日付をすすめる
同様の処理は年・月・週でも可能で(plusYears,plusMonths,plusWeeks)となる
1 import org.joda.time.DateTime; 2 3 public class Main { 4 public static void main(String[] args) { 5 DateTime dt = new DateTime(); 6 System.out.println(dt.plusDays(1)); 7 } 8 }
日付を遡らせる
同様の処理は年・月・週でも可能で(minusYears,minusMonths,minusWeeks)となる
1 import org.joda.time.DateTime; 2 3 public class Main { 4 public static void main(String[] args) { 5 DateTime dt = new DateTime(); 6 System.out.println(dt.minusDays(1)); 7 } 8 }
文字列からDateTimeへ変換
1 import org.joda.time.DateTime; 2 import org.joda.time.format.DateTimeFormatter; 3 import org.joda.time.format.DateTimeFormat; 4 5 public class Main { 6 public static void main(String[] args) { 7 8 String str = "2010-12-13"; 9 10 DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd"); 11 DateTime dt = formatter.parseDateTime(str); 12 13 System.out.println(dt); 14 } 15 }
ちなみにPerlだとDateTimeモジュールでDateTime::Format::Strptimeというモジュールがあって同様のことができる。
型変換(Date,Calendar)
1 import org.joda.time.DateTime; 2 import org.joda.time.DateTimeZone; 3 import org.joda.time.format.DateTimeFormatter; 4 import org.joda.time.format.DateTimeFormat; 5 6 import java.util.*; 7 8 public class Main { 9 public static void main(String[] args) { 10 11 DateTime dt = new DateTime(); 12 13 Date date = dt.toDate(); 14 15 System.out.println(date); 16 17 Calendar cal = dt.toCalendar(Locale.JAPAN); 18 19 System.out.println(cal); 20 } 21 }