【Swift】DateFormatterの使い方

日付と時間の書式を定義するクラスです。
Date構造体←→テキストの相互変換に使います。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】11.4.1
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
スポンサーリンク

Date→テキスト変換

Date→テキスト変換のサンプルソース示します。

dateFormatプロパティで変換フォーマットを定義し、stringメソッドでDate→テキスト変換を行います。

変換フォーマット定義で使える書式一覧

Date←→テキスト変換の変換フォーマット定義で使える書式一覧です。
変換例は、適用されるカレンダーおよびロケールによって変わります。

書式 説明
y 1, 12, 1234, 12345 最小桁数で出力
yy 01, 12, 34, 45 下2桁固定出力、0パディング有り
yyyy 0001, 0012, 1234, 12345 最小桁数4桁で出力、0パディング有り

カレンダーにjapanese(和暦)を採用した場合のみ、書式文字の後ろに”年”を付けると必ず最小桁数出力になるようです。

書式 説明
M 4, 12 数値、最小桁数
MM 04, 12 数値、2桁固定、0パディング有り
MMM Apr, Dec, 12月 文字列(短縮形)
MMMM April, December, 12月 文字列(完全)
MMMMM A, D, 12 文字列(記号)

書式 説明
d 1, 12 最小桁数
dd 01, 12 2桁固定、0パディング有り

時(12時間表記)

書式 説明
h 1, 12 最小桁数
hh 01, 12 2桁固定、0パディング有り

時(24時間表記)

書式 説明
H 1, 13 最小桁数
HH 01, 13 2桁固定、0パディング有り

アプリ側でLocaleを明示的に指定しない場合は、端末のロケールと24時間表示設定が変換結果に影響します。
このケースで端末側の24時間設定がoffになっていると、出力結果が”午前1時”、"午後1時”になるので注意して下さい。
端末の設定内容は「設定」>「一般」>「日付と時刻」で確認できます。

24時間表示オプション

書式 説明
m 1, 12 最小桁数
mm 01, 12 2桁固定、0パディング有り

書式 説明
s 1, 12 最小桁数
ss 01, 12 2桁固定、0パディング有り

ミリ秒

書式 説明
S 1 1桁固定
SS 01, 12 2桁固定
SSS 010, 12, 012 3桁固定

元号

書式 説明
G AD, 西暦, 令和 暦法およびロケールに応じた元号(省略形)
GGGG Anno Domini, 西暦, 令和 (完全)
GGGGG A, AD, R (記号)

曜日

書式 説明
E Sat, 土 暦法およびロケールに応じた曜日(省略形)
EEEE Saturday, 土曜日 (完全)
EEEEE S, 土 (記号)

午前、午後

書式 説明
a PM,午後 ロケールに応じた午前/午後表記
aaaaa p,午後 (記号)
スポンサーリンク

Date→テキスト変換(自動フォーマット)

変換フォーマットを指定せずに変換をする場合は、自動フォーマットとなります。
自動フォーマットでは、次の2つのプロパティ値を元に、カレンダー、ロケール、ユーザーの環境、OSのバージョン等に応じて、フォーマットが決定されます。

DateFormatter.dateStyle
日付の自動フォーマットスタイルの指定、デフォルト値はnone

DateFormatter.timeStyle
時間の自動フォーマットスタイルの指定、デフォルト値はnone

スタイル別の出力結果サンプル

dateStyle

スタイル値 gregorian、en_US gregorian、ja_JP japanese、ja_JP
.none 出力無し 出力無し 出力無し
.short 4/24/20 2020/04/24 R2/04/24
.medium Apr 24, 2020 2020/04/24 R2/04/24
.long April 24, 2020 2020年4月24日 令和2年4月24日
.full Friday, April 24, 2020 2020年4月24日 金曜日 令和2年4月24日 金曜日

timeStyle

スタイル値 gregorian、en_US gregorian、ja_JP japanese、ja_JP
.none 出力無し 出力無し 出力無し
.short 2:23 PM 14:23 14:23
.medium 2:23:56 PM 14:23:56 14:23:56
.long 2:23:56 PM GMT+9 14:23:56 JST 14:23:56 JST
.full 2:23:56 PM Japan Standard Time 14時23分56秒 日本標準時 14時23分56秒 日本標準時
スポンサーリンク

テキスト→Date変換

テキスト→Date変換では変換処理がstring()の代わりにdate()に置き換わります。

その他の使い方はDate→テキスト変換時と全く同様です。

スポンサーリンク

ISO8601形式の変換

ISO8601は時刻フォーマットに関する国際標準のフォーマットで、APIやログ出力などで一般的に使用されています。
このISO8601形式のDate←→テキスト相互変換には、専用クラス(ISO8601DateFormatter)が用意されていますので、こちらを使うと良いでしょう。
ISO8601形式に最適化されていますので、プロパティの設定を考えずに使えます。

スポンサーリンク

あわせて読みたい記事

【Swift】日付と時間を扱うクラス/構造体まとめ
Swiftでは日付と時間を扱う為にクラスや構造体がいくつか用意されており、組み合わせて使用します。本記事ではそれらのクラス/構造体を紹介します。
【Swift】Dateの使い方
Dateはカレンダーやタイムゾーンに依存しない「特定の時点」を示す構造体です。単体で日時の比較や、時間間隔の計算等が可能ですが、夏時間、閏年、うるう秒、暦法(ユリウス暦やグレゴレオ歴等)等は考慮されませんので、正確に算出する為にはCal...
【Swift】Calendarの使い方
Calenderは主に日付と時間の計算を行う際に使用する構造体です。
【Swift】TimeZoneの使い方
TimeZoneはタイムゾーン(標準時間帯)情報を保持する構造体です。タイムゾーンはある地域での標準時間を表す指標で、GMT(グリニッジ標準時)との時差で表します。日本の標準時間である日本標準時(JST)はGMT+9時間で定義されていま...
【Swift】Localeの使い方
Localeは、言語と地域を組み合わせたロケール情報を保持する構造体です。日付や時間、金額、数値等の書式の決定に影響します。