風水のアプリを作っていて旧暦を扱う必要が出てきました。
メモがてら、Swiftで旧暦を扱う方法をメモします。
Date型から算出
Date
型インスタンスから旧暦を算出してみます。
Calendar(identifier: .chinese)
を指定することで中国の農暦=日本でいう旧暦を指定できます。
let today = Date() //2018年12月18日に実行
// 中国の農暦 = 旧暦
let chineseCalendar = Calendar(identifier: .chinese)
let comp = chineseCalendar.dateComponents([.year, .month, .day], from: today)
print(comp.debugDescription)
// year: 35 month: 11 day: 12 isLeapMonth: false
西暦の年月日を旧暦に変換
西暦の日付を旧暦に変換したい場合はDateComponents
型を使います。
// グレゴリオ暦 = 西暦
let gregrianCalendar = Calendar(identifier: .gregorian)
var compornents = DateComponents()
compornents.year = 2018
compornents.month = 12
compornents.day = 18
// 西暦からDate型を作る
let gregrianDate = gregrianCalendar.date(from: compornents)!
// 中国の農暦 = 旧暦
let chineseCalendar = Calendar(identifier: .chinese)
// 旧暦に変換
let chineseComps = chineseCalendar.dateComponents([.year, .month, .day], from: gregrianDate)
print(chineseComps.debugDescription)
以上です。