読者です 読者をやめる 読者になる 読者になる

使って創ってApp

ソフトウェアを使ったり作ったりするブログです

NSDateFormatterで日付や時間の表示を設定する

NSDate で作った日付や時間の表示を変えてみましょう。それには NSDateFormatter クラスを使用します。国によって日時の表示が異なる場合がありますが、このクラスは国ごとの最適な表示をしてくれます。また、自分で設定することもできます。

この記事は Apple の Date Formatting Guide を参考にしています。

developer.apple.com

開発環境

NSDateFormatter の基本的な使い方

NSDateFormatter は日時の表示方法を「日付」と「時間」に分けて設定します。まずは何も設定しないで結果を表示してみましょう

let date = NSDate()
let formatter = NSDateFormatter()
let str = formatter.stringFromDate(date)
print(str)

何も表示されませんね。初めて知りました。

設定は5種類

日付・時間ともに同じ設定が用意されています。

  • FullStyle
  • LongStyle
  • MediumStyle
  • ShortStyle
  • NoStyle

それぞれ日本と米国表記を見てみましょう。米国表記にするには NSFormatter オブジェクトの Localeプロパティに NSLocale のインスタンスを入力します。

formatter.locale = NSLocale(localeIdentifier: "en_US")
FullStyle
formatter.dateStyle = .FullStyle
formatter.timeStyle = .FullStyle
// 日本:2015年12月16日水曜日 1時20分27秒 日本標準時
// 米国:Wednesday, December 16, 2015 at 1:20:27 AM Japan Standard Time
LongStyle
formatter.dateStyle = .LongStyle
formatter.timeStyle = .LongStyle
// 日本:2015年12月16日 1:26:02 JST
// 米国:December 16, 2015 at 1:26:02 AM GMT+9
MediumStyle
formatter.dateStyle = .MediumStyle
formatter.timeStyle = .MediumStyle
// 日本:2015/12/16 1:26:49
// 米国:Dec 16, 2015, 1:26:49 AM
ShortStyle
formatter.dateStyle = .ShortStyle
formatter.timeStyle = .ShortStyle
// 日本:2015/12/16 1:28
// 米国:12/16/15, 1:28 AM
NoStyle

何も表示されません。デフォルトが NoStyle なのですね。

NSDateFormatter の基本的な使い方 まとめ
  • 標準で用意されているフォーマットを使用すると、国に応じた表示をしてくれる
  • 表示したくない項目は NoStyle を指定するか、何も指定しない

自分で設定する

NSDateFormatter は、自分で表示方法を設定することができます。そのフォーマットは Unicode Technical Standard #35 (UTS #35: Unicode LDML: Dates) に従います。OS X v10.9 と iOS 7 では version tr35-31 を使用しています。

UTS #35を使うには NSDateFormatter オブジェクトの dateFormat プロパティに String で書いて代入します。

formatter.dateFormat = "Y-MMM-d H:mm"
//2015-12月-16 18:29
和暦で表示

和暦で表示することも可能です。そのために NSCalendear クラスを使用します。

// 和暦で表示
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierJapanese)
formatter.calendar = cal
formatter.dateFormat = "GGyy年度"
// 平成27年度

NSDateFormatter で、和暦の変換に固定する | Balun Software (Info) を参考にしました。

西暦表記

和暦でなく西暦表記にするには、calendarIdentifier を gregorian にします。

// 西暦で表示
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
formatter.calendar = cal
formatter.dateFormat = "GGyyyy年"
// 西暦2015年

まとめ

  • 基本的には dateStyle, timeStyle を設定する
  • 和暦で表示するには、calendarIdentifier を NSCalendarIdentifierJapanese に設定した NSCalendar クラスを使用する