日数や時間を加算減算する
一年後、一日後、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