日付まわりの処理 Date

投稿者: | 2015年5月18日
2016年11月2日追記
Swift3になってからいくつかのデータ型やクラス名についていたNSという接頭辞がなくなりました。

とりあえずここで扱っていたNSDateに関してはNSDate ClassリファレンスにFoundation FrameworkのData構造体がObjective-C APIのNSDateクラスと同じものを指している(超意訳)と書かれている気がするので、正確にはSwift3からはNSDateクラスではなくDate構造体を使うように変更したってことなのかも???

これまでとりあえずそんなもんとして処理をしていた日付まわりの処理について、少しだけ掘り下げておきましょう。まずはDateから。

Dateというのは、パラメータなしで呼び出すとグリニッジ標準時での現在日時を返します。したがって

now = Date()

(見通しを良くするために定数宣言のletと型宣言の: Dateは省略しました)というのは、nowという定数に現在日時を代入したことになります。

じゃあパラメータありだとどうなのか?試してみました。いろいろ試してうまく動いたのは次の三つ。

timeIntervalSinceReferenceDate:
グリニッジ標準時の2001年1月1日からの経過時間を得る
グリニッジ標準時の2001年1月1日からの経過時間を得る
timeIntervalSince1970:
グリニッジ標準時の1970年1月1日からの経過時間を得る
グリニッジ標準時の1970年1月1日からの経過時間を得る
timeIntervalSinceNow:
グリニッジ標準時の現在日時からの経過時間を得る
グリニッジ標準時の現在日時からの経過時間を得る

いずれも後ろに秒数を指定し、遡る場合には負の値を使用します。パラメータなしでの呼び出しと最後のパラメータに0を指定したtimeIntervalSinceNow:0は同じ結果になります。