【Swift】秒から何時間何分何秒に変換する#Swiftリルオッサ2021.12.15615この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。「秒を何時間何分何秒に変換したいな〜」と思っていたら体が勝手に調べていたので記事にまとめることにしました。5.5秒から何時間何分何秒に変換する今回はDateComponentsFormatterというクラスを使用します。DateComponentsFormatterこのクラスは、時間の量を文字列表現に変換してくれるフォーマッターで、時間の量をユーザーが読み取り可能な文字列にフォーマットしてくれます。このフォーマッターには多くのオプションがあり、出力文字列を省略したり拡張したりすることが可能です。何も設定しなければ、このフォーマッターは文字列を生成する時に現在のローカルと言語を考慮してくれます。ローカライズ対応を自動でやってくれるなんて素敵ですね。変換してみようTimeInterval型で3661秒を何時何分何秒の文字列に変換してみました。1秒オプションを設定することでいい感じに出力してくれました。オプションについて少し見ていきましょう。unitStyleこちらの値を設定することで時間の量の表現を変更することが出来ます。すべての日付と時刻の値は、現在のユーザーの言語設定に従ってローカライズおよびフォーマットされます。1:01:01結果としてはこのような違いがありました。スタイル名の英語の意味も調べてみました。.second]下記のように様々な単位を設定することが出来ます。ナノ秒includesApproximationPhrase約フレーズを含むかどうかを設定できるBool値で、出力の値に約を付けてくれます。1秒サザンオールスターズさんの勝手にシンドバッドさながら、だいたいの時間の文字列を出力してくれました。includesTimeRemainingPhrase残りフレーズを含むかどうかを設定できるBool値で、出力の値に残りを付けてくれます。1秒」という形で出力されました。zeroFormattingBehaviorzeroFormattingBehaviorでは値が0の時に単位がどういう振る舞いをするのか設定することが出来ます。.padを設定すると、0の単位を保持して表示することが出来ます。冒頭でも記載したのですが、このDateComponentsFormatterは、何も設定しなければ、このフォーマッターは文字列を生成する時に現在のローカルと言語を考慮してくれます。これは実はありがたいようで時々ありがたくないことがあるかと思います。笑ユーザーの地域や言語設定に関わらず、日本語で文字列を返したい時は、Calendarを設定してあげます。1時間DateComponentsFormatterのcalendarに日本のローカルカレンダーを設定してあげると現在地や言語設定に関わらず日本語で表示することが出来ました。この方法でincludesApproximationPhraseやincludesTimeRemainingPhraseをtrueにすると、言語設定が英語の場合には、Aboutやremainingだけは英語で表示されてしまうので気をつけましょう。おわりにこのDateComponentsFormatterクラスを使えば、「今、何時?」と聞かれて、大体の時間を返すアプリが容易に作れそうですね。気が向いたら作りたいと思います。