2015-06-15 82 views
1

我正在尝试创建一个函数,该函数将获取任意日历中传入的月份的公历和结束日期。所以如果我通过希伯来语日历,第三个月,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 
    } 
} 
+0

根据https://www.hebcal.com/converter/?hd=30&hm=Sivan&hy=5775&h2g=1和http://www.chabad.org/calendar/view/month.htm它不是。使用你的链接,输入今天的日期2015年6月15日,并转换为希伯来语,你会得到Sivan 28,5775 –

+0

我需要重新检查我的预期结果。 –

回答

1

的问题似乎从什么的5775“第三”月是解释干。基斯列夫是民间的第三个月。 1个基色娄月5775是2014年11月23日

但是,西尔是教会年的3个月和1西尔万·5775是2015年五月19

苹果的选择民间年月的编号是有点理解Tishrei(文明年的第一个月,教会年的第七个月)的希伯来文数字年增值。

不可否认,很多希伯来语日期转换网站会按照它们在教会年份的顺序列出月份,但如果您深入这些网站,您会发现它们准确反映了Tishrei第一个年份的变化。我注意到许多这些网站并不要求数字月份号码,而是让您从月份名称列表中进行选择,消除了仅仅涉及“第三”月份可能引起的混淆。