タイトルに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
でパースする。で、肝はLocaleをENGLISHにする。
LocaleをJAPANに設定してたら落ちたw
めでたし、めでたしw