Edited at

"dd/MMM/yyyy"な日付文字列で Invalid format って言われたら。

More than 3 years have passed since last update.

"17/Aug/2014"という日付文字列をパースしようとしたらある環境では動くのに、ある環境では Invalid format と言われ java.lang.IllegalArgumentException が発生しました。

これはロケール設定に依存した問題なので、プログラムでロケールを指定してパース出来るようにします。


環境


  • Mac OS X Version 10.9.5

  • Scala 2.10.4

  • Java 1.7.0_71

  • joda-time 2.3


確認

scala> import java.util.Locale

scala> import org.joda.time.DateTime
scala> import org.joda.time.format.DateTimeFormat
scala> import org.joda.time.DateTimeZone
scala> DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z").withZoneUTC().withLocale(Locale.ENGLISH).parseDateTime("17/Aug/2014:00:00:05 +0900")
res1: org.joda.time.DateTime = 2014-08-16T15:00:05.000Z

scala> DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z").withZoneUTC().withLocale(Locale.JAPANESE).parseDateTime("17/Aug/2014:00:00:05 +0900")
java.lang.IllegalArgumentException: Invalid format: "17/Aug/2014:00:00:05 +0900" is malformed at "Aug/2014:00:00:05 +0900


参照

http://www.loc.gov/standards/iso639-2/php/English_list.php