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 時間になっています。