Takahiro Octopress Blog

-1から始める情弱プログラミング

SwiftでNSDateFormatterを使ってNSDateからStringに変換してみる!

| Comments

NSDateFormatterとは

さて、本日はNSDateFormatterについて見ていきます。
NSDateFormatter

  • NSDateからStringへ変換する際に指定するフォーマットオブジェクト
  • StringからNSDateへ変換する際に指定するフォーマットオブジェクト

として使ったりします。
(他にもNSCalendar等々で利用します。)
基本的な変換は下記のようにできます。

1
2
3
4
5
6
func convertStringFromDate(date: NSDate) -> String {
  let dateFormatter = NSDateFormatter()
  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSSSS"

  return dateFormatter.stringFromDate(date)
}

続いて、よく利用する各種設定について見ていきましょう。

NSTimeZoneについて

NSTimeZoneはグリニッジ標準時と各地域の標準時の時差情報を持ったクラスです。
このクラスを利用することで、欲しい時差情報を含んだ日付を取得できます。

例えば下記のような形です。

1
2
3
4
5
6
7
func convertStringFromDate(date: NSDate) -> String {
  let dateFormatter = NSDateFormatter()
  dateFormatter.timeZone = NSTimeZone.defaultTimeZone()
  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSSSS"

  return dateFormatter.stringFromDate(date)
}

NSTimeZoneにはsystemTimeZone, defaultTimeZone, localTimeZone, 直接地域を指定する方法があります。

  • systemTimeZone:
    設定 > 一般 > 日付と時刻 で設定されている地域のタイムゾーンを返却する
  • defaultTimeZone:
    アプリで設定された地域のタイムゾーン
    アプリで設定されていない場合はsystemTimeZoneを返却する
  • localTimeZone:
    defaultTimeZoneへの参照値を返却する
  • 直接タイムゾーンを指定:
    GMT, UTC, ja_JP, en_USなどの地域を指定することで、指定地域のタイムゾーンを返却する

仮に、それぞれのタイムゾーンの設定をして文字列を出力してみると、

1
2
3
4
5
6
systemTimeZone: 2016-02-19 23:27:37.550000
defaultTimeZone: 2016-02-19 23:27:37.550000
localTimeZone: 2016-02-19 23:27:37.550000
GMT: 2016-02-19 14:27:37.551000
UTC: 2016-02-19 14:27:37.551000
ja_JP: 2016-02-19 23:27:37.551000

といった感じです。

NSLocaleについて

NSLocaleは言語や分化などの情報を持ったクラスです。
このクラスを利用することで、欲しい言語や分化の地域情報を含んだ日付を取得できます。

利用方法は下記のようになります。

1
2
3
4
5
6
7
func convertStringFromDate(date: NSDate) -> String {
  let dateFormatter = NSDateFormatter()
  dateFormatter.locale = NSLocale.currentLocale()
  dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSSSS"

  return dateFormatter.stringFromDate(date)
}
  • systemLocale:
    設定 > 一般 > 日付と時刻 で設定されている地域の情報を返却する
  • currentLocale:
    現在のユーザで設定されている地域の情報を返却する
    マルチユーザ環境下であれば、違いが出ると思います。

地味に文字列変換って面倒だったりするんですよね…。
とは言え、アプリを世界対応させる場合は、
ユーザの設定している 日付と時刻 に注意を配ることが大切です。

と言ったところで本日はここまで。

参考:

Comments