私はCocoaTouchで簡単なテストを行い、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から始まり、その月は「Tishri」です。
- 飛躍しない年では、Adarは6か月ではなく7か月です。
- うるう年では、Adar Iは6番、AdarIIは7番です。
- 「ニサン」は常に8であり、「エルル」は常に13です。
私の実験は正確な結果を生み出しているように聞こえますか?この動作はどこかに文書化されていますか?