【iOS】X日やX時間などの文字列表現を簡単に作れる DateComponentsFormatter
公開日:
:
最終更新日:2020/07/09
iOSアプリ開発 Foundation
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
こんにちは、@akio0911です。
「2018年5月6日」「19時13分」など日付や時刻の文字列表現を簡単に作れるDateFormatterというクラスがありますが、「5日」「8時間」「12分」など時間の量を表す文字列を簡単に作れるクラスも存在します。それが「DateComponentsFormatter」です。
使いかた
使いかたは簡単。DateComponentsFormatterのインスタンスを作成し、各種プロパティを適切に設定し、stringメソッドを呼び出すだけです。以下にいくつか例を挙げます。
秒数を指定して文字列を作る
string(from:) – DateComponentsFormatter | Apple Developer Documentation
TimeInterval型で秒数を指定し、それを表す文字列を作成します。
let formatter = DateComponentsFormatter() formatter.unitsStyle = .full formatter.allowedUnits = [.minute, .second] let timeInterval: TimeInterval = 60 * 5 + 15 print(formatter.string(from: timeInterval)!) // 英語環境: 5 minutes, 15 seconds // 日本語環境: 5分 15秒
DateComponentsから文字列を作る
string(from:) – DateComponentsFormatter | Apple Developer Documentation
DateComponentsで日・時・分などを指定し、それを表す文字列を作成します。
let formatter = DateComponentsFormatter() formatter.unitsStyle = .full formatter.allowedUnits = [.day, .hour, .minute] print(formatter.string(from: DateComponents(day: 5, hour: 7, minute: 12))!) // 英語環境: 5 days, 7 hours, 12 minutes // 日本語環境: 5日 7時間 12分
2つのDateの差から文字列を作る
string(from:to:) – DateComponentsFormatter | Apple Developer Documentation
2つのDate(from, to)を指定し、その差から文字列を作ります。
let formatter = DateComponentsFormatter() formatter.unitsStyle = .full formatter.allowedUnits = [.day, .hour, .minute, .second] let from = Date() let to = from.addingTimeInterval(60 * 3 + 24) print(formatter.string(from: from, to: to)!) // 英語環境: 3 minutes, 24 seconds // 日本語環境: 3分 24秒
スタイル指定
unitsStyle – DateComponentsFormatter | Apple Developer Documentation
unitsStyleプロパティを使うと、時間の量を文字列化する時の書式を指定することができます。
それぞれのスタイルについて、公式ドキュメントには以下のような説明があります。
- spellOut: 時間の単位と量を記述するスタイル。
- full: 時間の単位を表すスタイルで、数量は含まれません。
- short: ユニットのスペルを短縮したスタイル。
- brief: shortよりも短い、短縮された時間単位を使用するスタイル。
- abbreviated: 時間の単位に対して最も省略されたスペルを使用するスタイル。
- positional: 単位の位置を使用してその値を識別するスタイル。
以下、コードと出力例です。
func style(unitsStyle: DateComponentsFormatter.UnitsStyle) { let formatter = DateComponentsFormatter() formatter.unitsStyle = unitsStyle formatter.allowedUnits = [.day, .hour, .minute] print(formatter.string(from: DateComponents(day: 5, hour: 7, minute: 12))!) } func style() { style(unitsStyle: .spellOut) // 英語環境: five days, seven hours, twelve minutes // 日本語環境: 五日 七時間 十二分 style(unitsStyle: .full) // 英語環境: 5 days, 7 hours, 12 minutes // 日本語環境: 5日 7時間 12分 style(unitsStyle: .short) // 英語環境: 5 days, 7 hr, 12 min // 日本語環境: 5日 7時間 12分 style(unitsStyle: .brief) // 英語環境: 5days 7hr 12min // 日本語環境: 5日7時間12分 style(unitsStyle: .abbreviated) // 英語環境: 5d 7h 12m // 日本語環境: 5d7h12m style(unitsStyle: .positional) // 英語環境: 5d 7:12 // 日本語環境: 5d 7:12 }
まとめ
DateComponentsFormatterを使うと、DateFormatterのように簡単にローカライズ対応できるので、うまく使っていきたいですね。
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!