我用 Cocoa Touch 进行了一个快速测试,看看 NSHebrewCalendar 是如何工作的。我对月份数字特别感兴趣。我使用日期选择器轻松更改日期,并将其传递给记录希伯来日期、希伯来月份编号、希伯来年份以及年份是否为闰年的方法。看起来像这样:
BOOL isHebrewLeapYear = [self.calendar isHebrewLeapYear:[calendar hebrewYearForDate:[self.calendar workingDate]]];
NSLog(@"Hebrew Date:%@, Month Number: %i, %i is Leap Year: %i", [self.calendar stringFromHebrewDate:[self.calendar workingDate]], [self.calendar hebrewMonthNumberFromDate:[self.calendar workingDate]], [calendar hebrewYearForDate:[self.calendar workingDate]], isHebrewLeapYear);
该self.calendar
对象是一个自定义类。该workingDate
属性是一个NSDate
实例。以下是相关的方法声明。
// Check if a given year is a leap year
- (BOOL) isHebrewLeapYear:(NSInteger)year{
return ((7 * year + 1) % 19) < 7;
}
//Get the hebrew year for a given date
- (NSInteger) hebrewYearForDate:(NSDate *)date{
NSCalendar *hebrewCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar] autorelease];
return [[hebrewCalendar components:NSYearCalendarUnit fromDate:date] year];
}
- (NSInteger) hebrewMonthNumberFromDate:(NSDate *)date{
NSCalendar *hebrewCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar] autorelease];
return [[hebrewCalendar components:NSMonthCalendarUnit fromDate:date] month];
}
显然,希伯来闰年的处理方式如下:
- 月份编号从 1 开始,该月份为“提市里”。
- 在非闰年,Adar 是第 7 个月,而不是第 6 个月。
- 在闰年,Adar I 为 6,Adar II 为 7。
- “Nisan”总是 8,以此类推,直到“Elul”,它总是 13。
听起来我的实验产生了准确的结果吗?这种行为是否记录在任何地方?