[Android][Kotlin]Twitter APIのcreated_atを日付文字列を変換する

タイトルにKotlinって付けたけど、やってることはJavaと同じだからどちらでも大丈夫だと思う。

個人アプリのTwitter片思いチェッカーのレビューの要望でリストの画面をつぶやいていない順でソートできるようにして欲しい的なことが書かれていた。

で、そんなの簡単だろう。どうせつぶやき時間なんてUNIXタイムとかで返却されてるんだろ。

ちょろいぜ!

とか思ってたら予想と全然違くて、地味にハマったっていう話。

スポンサーリンク

Twitter APIの日付形式

返却値

なんでハマったかというと・・・。

Twitter APIから返却されたcreated_atのフォーマットが今まで見たこと無いものだった。

何でパースすれば良いのよ・・・?的な感じだった。

その文字列はこんな感じ。

Tue Mar 29 17:11:25 +0000 2019

LocalがJapanでもこの形式で返却される模様。

普段、日本人好みのフォーマットしか見たことなかったもんだから超戸惑うw

パースの仕方を検索してみた

「Twitter API created_at 変換 」

ググる能力が乏しすぎて大体がPythonの情報しか見当たらない。

Pythonは

‘%a %b %d %H:%M:%S +0000 %Y’

でパースできるらしい。

なんの考えもなしに以下のコードを書いてみた。

SimpleDateFormat("a b d H:M:S +0000 Y", Locale.JAPAN).parse("Tue Mar 29 17:11:25 +0000 2019")

はい。

「b」なんてパース形式無いよ!!

って落ちましたw

まぁ、そりゃそうだ。

というわけで正解

val date = SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZZ yyyy", Locale.ENGLISH).apply { isLenient = true }.parse("Tue Mar 29 17:11:25 +0000 2019")
SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.JAPAN).format(date)

実際はこんな雑に書いてないけど、やってることはこんな感じ。

EEE MMM dd HH:mm:ss ZZZZZ yyyy

でパースする。で、肝はLocaleENGLISHにする。

LocaleをJAPANに設定してたら落ちたw

めでたし、めでたしw

タイトルとURLをコピーしました