
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 をカスタムパターンでフォーマットして文字列として表示する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import SwiftUI import Foundation struct ContentView: View { // 3分45秒を例に表示 private let duration: Duration = .seconds(225) var body: some View { VStack(spacing: 20) { Text("Duration のフォーマット例") .font(.headline) Text(formattedDuration) .font(.largeTitle) .monospacedDigit() // 数字幅を揃えてタイマーっぽく見せる .padding() } } // Duration をフォーマットして文字列化 private var formattedDuration: String { duration.formatted( .time(pattern: .hourMinuteSecond(padHourToLength: 2)) ) } } |
上記コードでシンプルに Duration を「hh:mm:ss」の形式に変換することができています。
formatted() の基本構文
Duration のインスタンスに対して .formatted() を呼び出し、内部で .time(pattern:) を渡すことでフォーマットが適用されます。
|
1 2 3 4 |
let duration: Duration = .seconds(123) let result = duration.formatted(.time(pattern: .minuteSecond(padMinuteToLength: 2))) // 出力例: "02:03" |
このように、.formatted(.time(...)) を使うことで、Duration型を視覚的にわかりやすい文字列へと変換することができます。
主要なパターンの種類
Duration.TimeFormatStyle.Pattern では、時間をフォーマットする際にいくつかの代表的なパターンが用意されています。
| パターン名 | 説明 | 出力例 |
|---|---|---|
.hourMinute(padHourToLength:) |
「時:分」形式。時をゼロ埋め指定可能。 | "01:23" |
.hourMinuteSecond(padHourToLength:) |
「時:分:秒」形式。時をゼロ埋め指定可能。 | "00:01:23" |
.minuteSecond(padMinuteToLength:) |
「分:秒」形式。分をゼロ埋め指定可能。 | "01:23" |
padHourToLength や padMinuteToLength は桁数を指定してゼロ埋めするオプションです。
これらを組み合わせることで、タイマー・ストップウォッチ・再生時間表示など、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でのアプリ設計と非常に相性が良いので、ぜひプロダクトに取り入れてみてくださいね!

