Swift 3.0では、NSDateや、NSURLなどの型の名前から、NextStep(NS)由来の、接頭辞「NS」が取り除かれました。たとえばある時点の日時を管理する型はこれまでNSDateでししたが、Swift 3ではDateという構造体です。

■ 現在の日時を管理するDateオブジェクトを生成する

現在の日時を管理するDateオブジェクトを生成するにはイニシャライザを引数無しで呼び出します。生成したDateオブジェクトを変数nowに格納し、文字列として表示するには次のようにします。

var now = Date()
print(now) // 2016-09-13 07:36:56 +0000

実行結果の最後の「+0000」がグリニッジ標準時(GMT)とのオフセットです。このようにデフォルトではオフセットが「+000」となりグリニッジ標準時、つまり日本時間の9時間前)で表示されるわけです。

■ 日付時刻を日本時間で表示する

日付時刻を日本時間で表示するには次に説明するロケールを設定する必要があります。ロケールは、Locale構造体のインスタンスです。次のイニシャライザを使用して初期化します。

イニシャライザ:init(identifier:)
宣言: init(identifier string: String)
説明: 引数で指定したロケールで初期化する

*「localeIdentifier」が外部引数名で、「string」が内部引数名です。このイニシャライザの場合、外部引数名と内部引数名を個別に用意していますが、イニシャライザでは外部引数名を指定しなくても自動的に内部引数名が外部引数名として公開されます。

Dateオブジェクトにロケールを指定して日付時刻を戻すにはdescription(with:)メソッドを使用します。

メソッド:description(with:)
宣言:func description(with locale: Locale?) -> String
説明:指定したロケールに応じた日付時刻を表す文字列を戻す

次に実行例を示します。

let now = Date()
let jaLocale = Locale(identifier: "ja_JP")
print(now.description(with: jaLocale)) // 2016年9月13日火曜日 21時24分46秒 日本標準時

■ 現在時刻の時間差で日付時刻を設定する

Date型にはいろいろなイニシャライザが用意されています。ここでは、現在時刻との時間差で新たらDateオブジェクトを正正するイニシャライザを紹介しましょう。

イニシャライザ: init(timeIntervalSinceNow:)
宣言: init(timeIntervalSinceNow: TimeInterval)
説明: 現在時刻との時間差で日付時刻を指定する

引数の型のTimeIntervalは、Double型の数値です(typealiasによりDouble型の別名として設定されています)。単位は秒です。
現在時刻の24時間後(24 x 60 x 60秒後)のDateオブジェクトを生成し日時を表示するには次のようにします。

let now = Date()
let aDayAfter = Date(timeIntervalSinceNow: 24 * 60 * 60)
let jaLocale = Locale(identifier: "ja_JP")
print(aDayAfter.description(with: jaLocale)) // 2016年9月14日水曜日 22時21分02秒 日本標準時