秒数→◯分◯秒 という表記への変換を DateComponentsFormatter で実現する
目次
DateComponentsFormatter
を使うと、 秒数 を ◯分◯秒
という String に変換してくれます。
自前実装するより、端末の言語設定で Localize されるので活用していきたいところです。
ただ、この Object は locale を指定することができず、どうもアプリの Localization 設定と端末の言語設定が一致したときのみ反映されるようです。
基本的にアプリを作り始めたときは、English での Localization しかされていないような挙動なので、
日本語で使うような “◯ 分 ◯ 秒” を実現するにはその辺りをちょっと対応する必要があります。
環境
- MacOS:
12.1
- Xcode:
Version 13.2.1 (13C100)
- Swift:
5.5.2
◯ 分 ◯ 秒 という表記を DateComponentsFormatter で実現する方法
DateComponentsFormatter
の 基本的な使い方
基本的な使い方は以下のようになります。
ただ、これだけだと 2 minutes, 15 seconds
のような表記になります(日本語 Localization していない場合)。
fileprivate let dateComponentFormattter = createDateComponentsFormatter()
private func createDateComponentsFormatter() -> DateComponentsFormatter {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full // .abbreviated, .positional
formatter.allowedUnits = [.hour, .minute, .second]
return formatter
}
func secondsToString(_ sec: Double) -> String {
return dateComponentFormattter.string(from: TimeInterval(_sec)) ?? "?"
}
// print(secondsToString(135))
// -> 2分 15秒 にしたい
日本語 Localize を有効にする
Targets -> Info
に 以下の項目を追加します。
一応これだけで「日本語 Localization 対応」という扱いになるようです。
後は端末の言語設定が日本語になっていれば、上記関数の挙動が変化します。