Год неверен при преобразовании юлианской даты в григорианскую - PullRequest
0 голосов
/ 07 января 2019

Мне нужно преобразовать юлианские даты (полученные из API) в григорианские даты. Я перешел по следующей ссылке: Преобразование григорианской даты в юлианский подсчет дней в задаче C . Но компонент года сбивает с толку обоими способами (1):

NSInteger julianDays = 1580198400;
NSUInteger julianDayFor01012000 = 2451545;
NSCalendar *cal = [[NSCalendar alloc]           initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *comp = [[NSDateComponents alloc] init];
comp.year = 2000;
comp.month = 1;
comp.day = 1;
NSDate *ref = [cal dateFromComponents:comp];
NSDateComponents *diff = [[NSDateComponents alloc] init];
diff.day = julianDays - julianDayFor01012000;
NSDate *date = [cal dateByAddingComponents:diff toDate:ref options:0];
comp = [cal components:NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitYear fromDate:date];

Вывод: календарный год: 4321724 месяц: 3 високосный месяц: нет день: 3

А (2):

NSInteger julianDays = 1580198400;
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"g"];
NSDate *date = [fmt dateFromString:[@(julianDays) stringValue]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comp = [cal components:NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitYear fromDate:date];

Вывод: календарный год: 4321724 месяц: 3 високосный месяц: нет день: 3

Почему год 4321724? Должен ли я интерпретировать это дальше? Любая помощь будет оценена.

...