日数や時間を加算減算する

一年後、一日後、1時間前、1分前などを取得する方法をご紹介します。

カレンダオブジェクト Calender をつかって実施します。

得られた日付 Date を文字列にして単にコンソールに出力すると世界標準時(UTC)で表示されてしまいますので、日本標準時(JST)に変換してからコンソールに出力しています。

// 西暦カレンダー(グレゴリオ歴)を生成
let cal = Calendar( identifier: .gregorian )

// 2000/02/29 12:34:56 (うるう年)の日時を生成
let dtm0 = cal.date(from: DateComponents(
                            year: 2020,
                            month: 2,
                            day: 29,
                            hour: 12,
                            minute: 34,
                            second: 56
                            ))

let dtm10 = cal.date( byAdding: .year,   value: +1, to: dtm0! )
let dtm11 = cal.date( byAdding: .month,  value: +1, to: dtm0! )
let dtm12 = cal.date( byAdding: .day,    value: +1, to: dtm0! )
let dtm13 = cal.date( byAdding: .hour,   value: +1, to: dtm0! )
let dtm14 = cal.date( byAdding: .minute, value: +1, to: dtm0! )
let dtm15 = cal.date( byAdding: .second, value: +1, to: dtm0! )

let dtm20 = cal.date( byAdding: .year,   value: -1, to: dtm0! )
let dtm21 = cal.date( byAdding: .month,  value: -1, to: dtm0! )
let dtm22 = cal.date( byAdding: .day,    value: -1, to: dtm0! )
let dtm23 = cal.date( byAdding: .hour,   value: -1, to: dtm0! )
let dtm24 = cal.date( byAdding: .minute, value: -1, to: dtm0! )
let dtm25 = cal.date( byAdding: .second, value: -1, to: dtm0! )

// タイムゾーンを日本にする.
let tz_jst = TimeZone( identifier: "Asia/Tokyo" )
let dfm = DateFormatter()
dfm.dateFormat = "yyyy-MM-dd HH:mm:ss"
dfm.timeZone = tz_jst

let s0 = dfm.string( from: dtm0! )

let s10 = dfm.string( from: dtm10! )
let s11 = dfm.string( from: dtm11! )
let s12 = dfm.string( from: dtm12! )
let s13 = dfm.string( from: dtm13! )
let s14 = dfm.string( from: dtm14! )
let s15 = dfm.string( from: dtm15! )

let s20 = dfm.string( from: dtm20! )
let s21 = dfm.string( from: dtm21! )
let s22 = dfm.string( from: dtm22! )
let s23 = dfm.string( from: dtm23! )
let s24 = dfm.string( from: dtm24! )
let s25 = dfm.string( from: dtm25! )

// コンソールに出力する.
print("dtm0: \( s0 )")
print( "" )
print("dtm10: \( s10 )")
print("dtm11: \( s11 )")
print("dtm12: \( s12 )")
print("dtm13: \( s13 )")
print("dtm14: \( s14 )")
print("dtm15: \( s15 )")
print( "" )
print("dtm20: \( s20 )")
print("dtm21: \( s21 )")
print("dtm22: \( s22 )")
print("dtm23: \( s23 )")
print("dtm24: \( s24 )")
print("dtm25: \( s25 )")

下記が XCode のコンソール出力です。うるう年の一年前と一年後にご注目ください。

dtm0: 2020-02-29 12:34:56

dtm10: 2021-02-28 12:34:56
dtm11: 2020-03-29 12:34:56
dtm12: 2020-03-01 12:34:56
dtm13: 2020-02-29 13:34:56
dtm14: 2020-02-29 12:35:56
dtm15: 2020-02-29 12:34:57

dtm20: 2019-02-28 12:34:56
dtm21: 2020-01-29 12:34:56
dtm22: 2020-02-28 12:34:56
dtm23: 2020-02-29 11:34:56
dtm24: 2020-02-29 12:33:56
dtm25: 2020-02-29 12:34:55