Swift で日付(Date)をフォーマットされた文字列(String)に変換する

日付をフォーマットされた文字列に変換する

プログラミングをしていると、日付型のデータをフォーマットされた文字列に変換したい時ありますよね。

よく使うので、今回は Date 型から、フォーマットされた String に変換する方法を書いておこうと思います。

日付をフォーマットするのに便利な DateFormatter

Date 型の値をフォーマットして String に変換するのに一番簡単なのは DateFormatter を使う方法です。

DateFormatter は日付から文字列、文字列から日付への変換やフォーマットをするためにあるクラスです。


DateFormatter の dateFormat というプロパティにフォーマット文字列を指定して、string メソッドで文字列に変換します。

よく使いそうなフォーマット文字列を使った変換のサンプルコードを載せておきます。

let date = Date()

let df = DateFormatter()

df.dateFormat = "yyyy-MM-dd HH:mm:ss"
print(df.string(from: date))
// 2019-10-19 17:01:09

df.dateFormat = "yyyy/MM/dd HH:mm:ss"
print(df.string(from: date))
// 2019/10/19 17:01:09

df.dateFormat = "yy-M-d H:m:s"
print(df.string(from: date))
// 19-10-19 17:1:9

df.dateFormat = "yyyyMMddHHmmss"
print(df.string(from: date))
// 20191019170109

次のように Locale によって結果が変わるものもあります。

let date = Date()

let df = DateFormatter()

//--------------------------------------
// Japanese Locale
//--------------------------------------
df.locale = Locale(identifier: "ja_JP")

df.dateFormat = "MM/dd/yyyy hh:mm:ss a"
print(df.string(from: date))
// 10/19/2019 05:19:25 午後

df.dateFormat = "MMM dd, yyyy E"
print(df.string(from: date))
// 10月 19, 2019 土

df.dateFormat = "MMMM dd, yyyy EEEE"
print(df.string(from: date))
// 10月 19, 2019 土曜日

//--------------------------------------
// US English Locale
//--------------------------------------
df.locale = Locale(identifier: "en_US")

df.dateFormat = "MM/dd/yyyy hh:mm:ss a"
print(df.string(from: date))
// 10/19/2019 05:19:25 PM

df.dateFormat = "MMM dd, yyyy E"
print(df.string(from: date))
// Oct 19, 2019 Sat

df.dateFormat = "MMMM dd, yyyy EEEE"
print(df.string(from: date))
// October 19, 2019 Saturday
 

フォーマット文字列に、次のように他の言葉を入れても大丈夫です。

let date = Date()
let df = DateFormatter()

df.locale = Locale(identifier: "ja_JP")

df.dateFormat = "現在の日時は、yyyy年MM月dd日 ah時mm分です。"
print(df.string(from: date))
// 現在の日時は、2019年10月19日 午後5時40分です。

タイムゾーンや UTC との時差などを取得することもできます。

let date = Date()
let df = DateFormatter()

df.dateFormat = "z"
print(df.string(from: date))
// PDT

df.dateFormat = "zzzz"
print(df.string(from: date))
// Pacific Daylight Time

df.dateFormat = "Z"
print(df.string(from: date))
// -0700

私はアメリカのロサンゼルスに住んでいるので、タイムゾーンは Pacific Daylight Time (米国太平洋標準時(夏時間)) で、UTC との時差は -7 時間になっています。

© 2024 iOS 開発入門