Нумерация месяцев начинается с 1, в этом месяце "Тишри".
Correct.
В не високосный год Адар - номер 7, а не 6.
Технически неверно. (Подробнее об этом ниже)
В високосный год Адар I - номер 6, а Адар II - 7.
Correct.
«Нисан» всегда равен 8 и т. Д. До «Элула», который всегда равен 13.
Correct.
Так что же случилось с Адаром в не високосные годы? Я запустил этот код, чтобы узнать:
@autoreleasepool {
NSDate *today = [NSDate date];
NSCalendar *hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];
NSDateComponents *diff = [[NSDateComponents alloc] init];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"d MMMM y"];
[f setCalendar:hebrew];
for (NSInteger i = 0; i < 19; ++i) {
NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setYear:5772 + i];
[comp setDay:1];
NSLog(@"============= %d ============", [comp year]);
for (NSInteger i = 1; i <= 13; ++i) {
[comp setMonth:i];
NSDate *d = [hebrew dateFromComponents:comp];
NSLog(@"%d: %@ (%@)", i, [f stringFromDate:d], d);
}
}
}
В високосный год будет записано, что вы ожидаете:
============= 5790 ============
1: 1 Tishri 5790 (2029-09-10 07:00:00 +0000)
2: 1 Heshvan 5790 (2029-10-10 07:00:00 +0000)
3: 1 Kislev 5790 (2029-11-08 08:00:00 +0000)
4: 1 Tevet 5790 (2029-12-07 08:00:00 +0000)
5: 1 Shevat 5790 (2030-01-05 08:00:00 +0000)
6: 1 Adar I 5790 (2030-02-04 08:00:00 +0000)
7: 1 Adar II 5790 (2030-03-06 08:00:00 +0000)
8: 1 Nisan 5790 (2030-04-04 07:00:00 +0000)
9: 1 Iyar 5790 (2030-05-04 07:00:00 +0000)
10: 1 Sivan 5790 (2030-06-02 07:00:00 +0000)
11: 1 Tamuz 5790 (2030-07-02 07:00:00 +0000)
12: 1 Av 5790 (2030-07-31 07:00:00 +0000)
13: 1 Elul 5790 (2030-08-30 07:00:00 +0000)
Для каждого приращения компонента даты «месяц» мы получаем разные даты. Но когда мы запускаем это в не високосный год, мы получаем это:
============= 5789 ============
1: 1 Tishri 5789 (2028-09-21 07:00:00 +0000)
2: 1 Heshvan 5789 (2028-10-21 07:00:00 +0000)
3: 1 Kislev 5789 (2028-11-19 08:00:00 +0000)
4: 1 Tevet 5789 (2028-12-19 08:00:00 +0000)
5: 1 Shevat 5789 (2029-01-17 08:00:00 +0000)
6: 1 Adar 5789 (2029-02-16 08:00:00 +0000)
7: 1 Adar 5789 (2029-02-16 08:00:00 +0000)
8: 1 Nisan 5789 (2029-03-17 07:00:00 +0000)
9: 1 Iyar 5789 (2029-04-16 07:00:00 +0000)
10: 1 Sivan 5789 (2029-05-15 07:00:00 +0000)
11: 1 Tamuz 5789 (2029-06-14 07:00:00 +0000)
12: 1 Av 5789 (2029-07-13 07:00:00 +0000)
13: 1 Elul 5789 (2029-08-12 07:00:00 +0000)
Здесь мы видим, что месяц с 6 и 7 оба оценят по Адару. Таким образом, Адар является 6-м и 7-м месяцем в не високосные годы.
Кроме того, поскольку мы знаем, что 5790 год является високосным, мы можем вывести более простую реализацию метода -isHebrewLeapYear:
:
- (BOOL) isHebrewLeapYear:(NSInteger)year{
return year % 19 == 14;
}