我看到DateComponents has an Instance Property isLeapMonth。它似乎是一个二传手的财产。我真正想知道的是一年,一个月是闰月。这可能在API中,或者我是否需要实现自己的算法?非常感谢提前。
答案 0 :(得分:1)
您可以检查当月的第一天是否设置为跳跃,是否为有效日期:
func isLeap(month: Int, year: Int, era: Int, calendar: Calendar) -> Bool {
var components = DateComponents()
components.era = era
components.year = year
components.month = month
components.day = 1
components.isLeapMonth = true
return components.isValidDate(in: calendar)
}
// The Chinese year that begins in 2017
isLeap(month: 5, year: 34, era: 78, calendar: Calendar(identifier: .chinese)) // false
isLeap(month: 6, year: 34, era: 78, calendar: Calendar(identifier: .chinese)) // true
// The Chinese year that begins in 2020
isLeap(month: 3, year: 37, era: 78, calendar: Calendar(identifier: .chinese)) // false
isLeap(month: 4, year: 37, era: 78, calendar: Calendar(identifier: .chinese)) // true
根据this list,有一些日历系统使用闰月作为日期更正机制。中国日历是我比较熟悉的日历。您可以将其与list of leap months in the Chinese calendar
进行交叉引用