DateFormatterを汎用化する
9月は山登りしたりテント泊したり、遅めの夏休みということで海外旅行🏝したり、リフレッシュできて満足しているmuchanです。
仕事とプライベートで割と慌ただしくしていた分、体調が心配だったけれども、毎日DHCのマルチビタミンを飲んでうがい手洗いをしていたら、風邪引くこともなく全力投球できました。やっぱり予防は大事ですね💁♀️
今回は割と自分のメモに近いですが、DateFormatterを汎用化する話。
DateをStringへ変換する際等によく利用するDateFormatterですが、DateFormatterを生成が重いという話をよく聞きますよね。計測している記事が参考になります👀
日時をDateの形で持っておいて、View側で日時を文字列に変換したい場合などには、ViewController側でDateFormatterを保持したりしますが、割と同じ形式の文字列に変換する事が多かったので、シングルトンで保持してどこからでも利用できるようにしました。
こんな感じ。
class MyDateFormatter { static let shared = MyDateFormatter() private let yyyyMMddDateFormatter: DateFormatter = { let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US_POSIX") dateFormatter.dateFormat = "yyyy/MM/dd" return dateFormatter }() private let HHmmDateFormatter: DateFormatter = { let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US_POSIX") dateFormatter.dateFormat = "HH:mm" return dateFormatter }() func formatToyyyyMMdd(from date: Date) -> String { return yyyyMMddDateFormatter.string(from: date) } func formatToHHmm(from date: Date) -> String { return HHmmDateFormatter.string(from: date) } }
利用する際は、以下のようになります。
let dateString = MyDateFormatter.shared.formatToyyyyMMdd(from: date)
よく使う形式のDateFormatterについては、シングルトンにして各処理から呼び出すようにする事で生成を1度で済ませることができ、処理を効率化できますね🙌