LoginSignup
4
2

More than 3 years have passed since last update.

SimpleDateFormatでParseExceptionが出るときの確認点

Posted at

Rssフィールドから日付を取得していたら、parseExceptionが出ました。

parseExceptionが起こった時の確認点をまとめたいと思います。

エラーは下記になります

java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:161)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.text.ParseException: Unparseable date: "Fri, 24 May 2019 13:10:14 +0900"
        at java.text.DateFormat.parse(DateFormat.java:362)
    // (省略)

①形式はあっているか?

Rss.kt
val formatter = SimpleDateFormat("EEE, dd MM yyyy HH:mm:ss z")

最初に上記のように記載してしまいました。
リファレンスを見てみると、形式に誤りがあることがわかりました。

文字 説明 使用例
y yyyy = 2019
yy = 19
M MMMM = July
MMM= Jul
MM = 07
M = 7
H 時間 HH = 08
m mm=20
s ss= 58
z General タイムゾーン JST
Z RFC 822 タイムゾーン +0900
a AM/PM AM
k 1日の中での時間 13
K AM/PMの中での時間 01

上の表によると、MMという部分と、zの部分を間違っていました。
大文字・小文字で意味が全く違うものもあるので、要注意です。
下記の形式でパースできるはずです。

Rss.kt
val formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z")

②環境依存はないか?

①だけだと不完全です。
パースしてみると下記が出力されます。

金, 24 5 2019 13:10:14 +0900

曜日が日本語表示になっていました。
デフォルトが日本語になっているようでした。
SimpledateFormatで形式を設定するときにロケールを設定する必要があります。

Rss.kt
val formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US)

うまくパースできないときは上記のことを確認してみるといいかもしれません。

参照

Android Developers SimpleDateFormat
SimpleDateFormatクラスparseメソッドのLocaleに注意

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2