NSDateFormatterで日付や時間の表示を設定する
NSDate で作った日付や時間の表示を変えてみましょう。それには NSDateFormatter クラスを使用します。国によって日時の表示が異なる場合がありますが、このクラスは国ごとの最適な表示をしてくれます。また、自分で設定することもできます。
この記事は Apple の Date Formatting Guide を参考にしています。
開発環境
NSDateFormatter の基本的な使い方
NSDateFormatter は日時の表示方法を「日付」と「時間」に分けて設定します。まずは何も設定しないで結果を表示してみましょう
let formatter = NSDateFormatter()
let str = formatter.stringFromDate(date)
print(str)
何も表示されませんね。初めて知りました。
設定は5種類
日付・時間ともに同じ設定が用意されています。
- FullStyle
- LongStyle
- MediumStyle
- ShortStyle
- NoStyle
それぞれ日本と米国表記を見てみましょう。米国表記にするには NSFormatter オブジェクトの Localeプロパティに NSLocale のインスタンスを入力します。
FullStyle
formatter.timeStyle = .FullStyle
// 日本:2015年12月16日水曜日 1時20分27秒 日本標準時
// 米国:Wednesday, December 16, 2015 at 1:20:27 AM Japan Standard Time
LongStyle
formatter.timeStyle = .LongStyle
// 日本:2015年12月16日 1:26:02 JST
// 米国:December 16, 2015 at 1:26:02 AM GMT+9
MediumStyle
formatter.timeStyle = .MediumStyle
// 日本:2015/12/16 1:26:49
// 米国:Dec 16, 2015, 1:26:49 AM
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 で書いて代入します。
//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 クラスを使用する