【Swift】DataFormatterを使って文字列型をDate型に変換する

SwiftにはDataFormatterというクラスがあり、これを使うと文字列型で取得した日付をDate型で取り込むことができます。

例えば、RSSフィードなどに記載されている記事の投稿日時です。

よく見る形ですが、以下のようになっていると思います。

「曜日, 日付 月 西暦 時間 タイムゾーン」

の形です。

JSTなどの日本時刻だと+9時間、「+0900」で示されます。

SwiftのXML Parserを使うと、文字列型として取得します。

文字列型だと日付順のソートができないので、DateFormatter()を使ってDate型に変換する必要があります。

読み取り時にはlocaleを”ja_JP”にするとエラーが発生します。

日本時間では読み取れないのでしょう。

アメリカの時刻でありコンピュータ時間でもあるen_US_POSIXを指定します。

指定できるロケールの一覧はこのサイトにあります。

dateFormatを指定していますが、これはdataStringのフォーマットに合わせて指定するものです。

  • E = 曜日
  • d = 日付
  • MMM = 月
  • yyyy = 西暦
  • HH:mm:ss = 時間
  • z = タイムゾーン

RSSフィードの時間フォーマットは決まっていますので、dateFormatが違っている(例えば、zがない)と実行時にエラーが出ます。

yやMの数を調整するのは問題ありません。

実行結果は以下の通り。Date型で出力されます。

これでパースした後にソートすることができます。

せっかくなのでData型から文字列型に変換する方法もみていきましょう。

先ほどと違い、Data型から文字列型への変換の時にはlocaleIdentifierdataFormatは自由に指定できます。

日本時刻にして「西暦/月/日付 時間」で表示してみます。

出力は以下の通り。

ロケールを日本に指定しているため+0900になっています。