秒数 ->時刻形式(HH:mm:ss)に変換する方法 – Swift4.0
カウントダウンタイマー的なコードを書く中で、秒数を日付単位に変換したくなり調べたので備忘録
サンプルコード
//そのままViewControllerに貼り付ければOK import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let formatter = DateComponentsFormatter() formatter.unitsStyle = .positional formatter.allowedUnits = [.minute,.hour,.second] let data = formatter.string(from: 10000.0) print("positional",data!) //short formatter.unitsStyle = .short let data2 = formatter.string(from: 10000.0) print("short",data2!) //brief formatter.unitsStyle = .brief let data3 = formatter.string(from: 10000.0) print("brief",data3!) //full formatter.unitsStyle = .full let data4 = formatter.string(from: 10000.0) print("full",data4!) //spellOut formatter.unitsStyle = .spellOut let data5 = formatter.string(from: 10000.0) print("spellOut",data5!) //abbreviated formatter.unitsStyle = .abbreviated let data6 = formatter.string(from: 10000.0) print("abbreviated",data6!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
デバッグエリアの出力内容
positional 2:46:40 short 2時間 46分 40秒 brief 2時間46分40秒 full 2時間 46分 40秒 spellOut 二時間 四十六分 四十秒 abbreviated 2h46m40s
コードの説明
DateComponentsFormatterのunitsStyleを使うことで様々な形式に変換できます。
Shortとfullなどの違いが出ていないものもありますが、allowedUnitsを指定することで時間ではなく日時に変換することが可能なので、試してみてください。
なお、zeroFormattingBehaviorを指定まると、ある単位で値が0になるときの振る舞いも指定することができます。
また、Optionalなので「data!」とあんラップしていますが、何もつけないとOptional(“2:46:40”)となります。
日付が日本語にならない場合
アプリを海外対応させたいのであれば、ローカライズが必要になります。
簡易的に行うには下記で可能です。
・「info.plist」ファイルを選択
・一番上の方の「Localization native development region」 -> Value:「$(DEVELOPMENT_LANGUAGE)」を「Japan」にする
お知らせ
ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!