【Swift】Duration.TimeFormatStyle.Patternとは?使い方や活用シーンをわかりやすく解説!

Swiftで「時間の表現形式」を自由にカスタマイズしたいときに便利なのが Duration.TimeFormatStyle.Pattern です。

例えば、「01:02:03」といった形式で、Duration(時間間隔)を人間が読みやすいテキストに変換できます。

この記事では Duration.TimeFormatStyle.Pattern の基本的な意味や使い方、主要な引数、活用シーン、注意点をわかりやすく解説します。

Duration.TimeFormatStyle.Pattern とは?

Duration.TimeFormatStyle.Pattern は、Swiftの Foundation フレームワークに含まれる時間の表示形式をカスタマイズするためのフォーマッタです。

具体的には、Duration 型(時間の差を表す型)を、「hh:mm:ss」「hh:mm」など、いくつかのスタイルで文字列に変換するために使います。

Swift 5.7(iOS 16 / macOS 13 以降)から導入され、以前の DateComponentsFormatter よりもはるかに柔軟でSwiftらしい構文で記述できるのが特徴です。

具体例:3分45秒を「00:03:45」と表示する

以下は、Duration をカスタムパターンでフォーマットして文字列として表示する例です。

コードのポイント

  • private let duration: Duration = .seconds(225)
    → 225秒(=3分45秒)を Duration 型で定義しています。

  • formattedDuration プロパティ
    duration.formatted(.time(...)) を使って Duration を文字列に変換しています。

  • .hourMinuteSecond(padHourToLength: 2)
    → 「時:分:秒」の形式で表示するパターン。ゼロ埋めを行うため「03:45」ではなく「00:03:45」と出力されます。

  • .monospacedDigit()
    → 数字の幅を揃えて表示する修飾。タイマー表示のように桁が揃い、読みやすくなります。

  • VStackText
    → SwiftUI の基本的なレイアウトとテキスト表示を使い、シンプルな UI にしています。

Duration.TimeFormat1

上記コードでシンプルに Duration を「hh:mm:ss」の形式に変換することができています。

formatted() の基本構文

Duration のインスタンスに対して .formatted() を呼び出し、内部で .time(pattern:) を渡すことでフォーマットが適用されます。

このように、.formatted(.time(...)) を使うことで、Duration型を視覚的にわかりやすい文字列へと変換することができます。

主要なパターンの種類

Duration.TimeFormatStyle.Pattern では、時間をフォーマットする際にいくつかの代表的なパターンが用意されています。

パターン名 説明 出力例
.hourMinute(padHourToLength:) 「時:分」形式。時をゼロ埋め指定可能。 "01:23"
.hourMinuteSecond(padHourToLength:) 「時:分:秒」形式。時をゼロ埋め指定可能。 "00:01:23"
.minuteSecond(padMinuteToLength:) 「分:秒」形式。分をゼロ埋め指定可能。 "01:23"

padHourToLengthpadMinuteToLength は桁数を指定してゼロ埋めするオプションです。

これらを組み合わせることで、タイマー・ストップウォッチ・再生時間表示など、UI に応じたわかりやすい時間表記を柔軟に作れます。

活用シーン

Duration.TimeFormatStyle.Pattern は以下のような場面で非常に便利です。

  • ストップウォッチやカウントダウンタイマーの表示(例:00:01:23)
  • 運動・学習・作業などの時間計測アプリ
  • 再生時間・経過時間の表示(例:音楽・動画アプリ)
  • 日常アプリでの自然言語的な時間表示(例:1時間12分)

UI上でわかりやすく時間を表示したいときに、ユーザーに応じた柔軟な出力スタイルが求められる場面に最適です。

まとめ

今回は Duration.TimeFormatStyle.Pattern について詳しく解説しました。

  • Duration.TimeFormatStyle.Pattern は、デジタル時計風の時間表示を制御できるスタイル定義
  • Duration を「hh:mm:ss」「mm:ss」などの形式で表示可能
  • 利用できる主要なパターンは
    • .hourMinute(padHourToLength:)
    • .hourMinuteSecond(padHourToLength:)
    • .minuteSecond(padMinuteToLength:)
  • 対応は iOS 16 / macOS 13 以降、Swift 5.7 以降
  • ゼロ埋めオプションを指定すれば「01:23」「00:01:23」など柔軟な表記が可能

Duration と組み合わせることで、アプリのUIをより視覚的に・ユーザーフレンドリーにできます。

特にSwiftUIでのアプリ設計と非常に相性が良いので、ぜひプロダクトに取り入れてみてくださいね!

おすすめの記事