Karakuri.com

Fintechではたらくアプリケーションエンジニアの技術録

Swift4でDateの日時を任意のフォーマットでStringで表示する

Swiftの日時を表示するのはDateクラスで簡単に実装できます。

// 2018/01/12 00:00:00
print(Date())

しかしFormatを指定するとなると結構行数を使ってしまうんですよね。

let format = DateFormatter()
format.timeStyle = .short
format.dateStyle = .short
format.locale = Locale(identifier: "ja_JP")
// 2018/01/12 00:00
print(format.string(from: Date()))

Dateクラスを拡張する

毎回書くのは冗長ですし、表記を変えたいとなったときに死ぬのでDateクラスを拡張してしまいましょう。

import Foundation

public extension Date {
    public func toString() -> String {
        let format = DateFormatter()
        format.timeStyle = .short
        format.dateStyle = .short
        format.locale = Locale(identifier: "ja_JP")
        return format.string(from: self)
    }
}

これで楽になりました。.Net Frameworkが

// 2018/01/12 00:00:00
DateTime.Now.ToString();

と書けるように、今回拡張したことで

// 2018/01/12 00:00
Date().toString()

と書くことができるようになりました。

フォーマットを簡潔に指定できるように拡張する

そう思ってたら更に便利に拡張している人がいました。.Net Frameworkは下記のようにフォーマットを指定することができます。

// 2018/01/12 00:00
DateTime.Now.ToString("yyyy/MM/dd HH:mm")

Swiftもこれと同じように拡張したほうが利便性高いですね。

import Foundation

public extension Date {
    func toString(format:String = "yyyy/MM/dd HH:mm:ss") -> String {
        let format = DateFormatter()
        format.dateFormat = format
        return format.string(from: self)
    }
}
// 2018/01/12 00:00
Date().toString("yyyy/MM/dd HH:mm")

qiita.com
というか、標準のDateでこのくらい実装してくれていても良いと思うんですけどねえ…。