【Swift】日時の扱い方。文字列と日時を相互変換する。時間差を算出する。(Swift 2.1、XCode 7.2)

2020年6月16日

現在日時を取得する

日時を扱うときはOjbective-Cで同じみのNSDateクラスとNSDateFormatterクラスを利用する。

以下のコードのようにNSDateクラスとNSDateFormatterクラスのインスタンスを生成し、ロケールとフォーマットのスタイルを設定する。スタイルを指定しなかった場合は出力されない。

NSDateFormatterクラスのメソッドを介してNSDateをStringに変換する。逆に、StringをNSDateに変換することもできる。

 

スタイルごとの表示例を下表に記載する。

プロパティ 設定値 表示例
1 .dateStyle .ShortStyle 2016/04/21
2 .dateStyle .MediumStyle 2016/04/21
3 .dateStyle .LongStyle 2016年4月21日
4 .dateStyle .FullStyle 2016年4月21日木曜日
5 .timeStyle .ShortStyle 20:49
6 .timeStyle .MediumStyle 20:50:47
7 .timeStyle .LongStyle 20:51:29 GMT-8
8 .timeStyle .FullStyle 20時52分03秒 アラスカ夏時間

 

フォーマットを指定して日時を取得する。

日時のフォーマットを自分で決めたい場合がある。そんなときは、以下のコードのようにdateFormatプロパティにフォーマット文字列を設定する。変換時にフォーマット文字列のyyyyやMMなどが日時に置換される。

 

下表は、フォーマットの置換文字列の一覧。

置換対象 内容 表示例
1 yy 西暦の下2桁 yy年⇒16年
2 yyyy 西暦 yyyy年⇒2016年
3 M M月⇒7月
4 MM 月(ゼロ埋め) MM月⇒07月
5 MMM 月(言語表記) MMM⇒7月(言語設定が英語ならJuly)
6 d d日⇒3日
7 dd 日(ゼロ埋め) ddddd日⇒00003日
8 h 時(12時間表記) h時⇒9時
9 hh 時(12時間表記、ゼロ埋め) hhhhh時⇒00009時
10 H 時(24時間表記) H時⇒21時
11 HH 時(24時間表記、ゼロ埋め) HHHHH時⇒00021時
12 m m分⇒3分
13 mm 分(ゼロ埋め) mmmmm分⇒00003分
14 s s秒⇒5秒
15 ss 秒(ゼロ埋め) sssss秒⇒00008秒
16 SSS ミリ秒 SSSミリ秒⇒756ミリ秒
17 D 年明けからの日数 D日⇒122日
18 DD 年明けからの日数(ゼロ埋め) DDDDD日⇒00122日
19 w 年明けからの週 w週⇒3週
20 ww 年明けからの週(ゼロ埋め) wwwww週⇒00003週
21 E 曜日(短縮形) E⇒金(英語ならFri)
22 EEEE 曜日 EEEE⇒金曜日(英語ならFriday)
23 EEEEE 曜日(一文字) EEEEE⇒金(英語ならF)
24 a 午前or午後 a⇒午前(英語ならAM)

文字列をNSDateに変換する

文字列をNSDateに変換する場合は以下のコードのようにする。

 

日時に時間を加算する

NSDateに時間を加算するには以下のメソッドを用いる。引数には加算する秒を入力する。1時間後、1週間後などはすべて秒数に換算して加算する必要がある。

 

日時の時間差を求める

現在時刻からの時間差や、日時同士の時間差(秒)を求めるには以下のメソッドを用いる。