У меня есть дата, которая с 1 января 1600 года хранится в количестве дней, с которыми мне нужно иметь дело.Это устаревший формат даты, который мне нужно читать много раз в моем приложении.
Раньше я создавал календарь, пустые компоненты даты и корневую дату, например:
self.gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar
] autorelease];
id rootComponents = [[[NSDateComponents alloc] init] autorelease];
[rootComponents setYear: 1600];
[rootComponents setMonth: 1];
[rootComponents setDay: 1];
self.rootDate = [gregorian dateFromComponents: rootComponents];
self.offset = [[[NSDateComponents alloc] init] autorelease];
Затем, чтобы преобразовать целое число позже в дату, я использую это:
[offset setDay: theLegacyDate];
id eventDate = [gregorian dateByAddingComponents: offset
toDate: rootDate
options: 0];
(я никогда не изменяю значения в смещении где-либо еще.)
Проблема в том, что яу меня другое время для rootDate
на iOS против Mac OS X. В Mac OS X я получаю полночь.На iOS я получаю 8:12:28.(Похоже, до сих пор это не противоречит.) Когда я добавляю число дней спустя, странное время остается.
OS | legacyDate | rootDate | eventDate
======== | ========== | ==========================|==========================
Mac OS X | 143671 | 1600-01-01 00:00:00 -0800 | 1993-05-11 00:00:00 -0700
iOS | 143671 | 1600-01-01 08:12:28 +0000 | 1993-05-11 07:12:28 +0000
В предыдущем выпуске моего продукта мне было все равновремя;сейчас делаю.Почему странное время на iOS, и что мне с этим делать?(Я предполагаю, что разница в часах равна летнему времени.)
Я попытался установить часы, минуты и секунды для rootComponents равными 0. Это никак не повлияет.Если я установлю для них значение, отличное от 0, это добавит их к 8:12:28.Мне было интересно, имеет ли это какое-то отношение к високосным секундам или другим кумулятивным изменениям часов.
Или это совершенно неправильный подход для использования на iOS?