我正在尝试创建一个函数,该函数将获取任意日历中传入的月份的公历开始日期和结束日期。
因此,如果我通过希伯来日历,第 3 个月,5775 年,我会期望得到这样的结果 (2015-05-19T00:00:00.000-05:00, 2015-06-17T00:00:00.000-05: 00)
let (start,end) = gregorianMonthForCalendarMonth(NSCalendar(calendarIdentifier: NSCalendarIdentifierHebrew)!, 3, 5775)
println(start)
println(end)
我得到的是 (2014-11-23T00:00:00.000-05:00, 2014-12-22T00:00:00.000-05:00)
不确定我做错了什么。
我的职能:
let fullDateFormatter = getFullDateFormatter()
func getFullDateFormatter() -> NSDateFormatter {
let _dateFormatter = NSDateFormatter()
_dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
_dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ"
return _dateFormatter
}
func gregorianMonthForCalendarMonth(calendar:NSCalendar, month:Int, year:Int) -> (start:String, end:String) {
// get 1st day of month
let components = NSDateComponents()
components.year = year
components.month = month
components.day = 1
let start = calendar.dateFromComponents(components)
// get number of days in the month
let days = calendar.rangeOfUnit(NSCalendarUnit.CalendarUnitDay, inUnit: NSCalendarUnit.CalendarUnitMonth, forDate: start!)
components.day = days.length
let end = calendar.dateFromComponents(components)
return (start!.stringValue(),end!.stringValue())
}
extension NSDate {
func stringValue() -> String {
let strDate = fullDateFormatter.stringFromDate(self)
return strDate
}
}
最佳答案
问题似乎源于对 5775 的“第三”个月的解释。基斯流月是民历年的第三个月。 1 Kislev 5775 是 2014 年 11 月 23 日。
然而,Silvan 是教会年的第 3 个月,1 Silvan 5775 是 2015 年 5 月 19 日。
Apple 选择民用年月编号方式在某种程度上是可以理解的,因为希伯来数字年值在 Tishrei(民用年的第一个月,教会年的第七个月)上递增。
诚然,许多希伯来语日期转换网站按照教会年中出现的顺序列出月份,但如果您深入研究这些网站,您会发现它们准确地反射(reflect)了 Tishrei 的第一个年份数字变化。我注意到,其中许多网站不要求提供月份数字,而是让您从月份名称列表中进行选择,从而消除了简单提及“第三”月份可能会带来的混淆。
关于ios - 日期转换不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30848411/