Я пишу приложение, которое включает в себя время рождения людей, и я пытаюсь использовать IOS, чтобы получить точное смещение по Гринвичу. Я получаю явно неправильные ответы, и мне интересно, сталкивались ли с ними другие или есть ли обходные пути.
Вот код, который я использую для вычисления смещения (первая строка), и код регистрации, чтобы показать, что у меня есть.
ret.dateTime.offset = [tz secondsFromGMTForDate:date] / 3600.0;
double dstOffset = [tz daylightSavingTimeOffsetForDate:date] / 3600.0;
NSLog(@"Setting offset for %@ on %@, to %3.1f", ret.location.description, ret.dateTime.briefDateDescription, ret.dateTime.offset);
NSLog (@" (TZ Name = %@, date = %@, dstOffset = %3.1f)", tz.name, date, dstOffset);
Вот результаты - правильные для Плимута и Нью-Йорка, которые находятся по восточному времени, и смещение летнего времени верно для всех из них, но secondFromGMTForDate отличается на один час для Миннеаполиса (по центральному времени) и на час в другое направление на Атланту (по восточному времени).
Setting offset for Minneapolis, MN on 3/26/70, to -5.0
(TZ Name = America/Menominee, date = 1970-03-26 14:29:00 +0000, dstOffset = 0.0)
Setting offset for Plymouth, MA on 1/13/80, to -5.0
(TZ Name = America/New_York, date = 1980-01-14 02:52:00 +0000, dstOffset = 0.0)
Setting offset for Atlanta, GA on 10/10/48, to -6.0
(TZ Name = America/Kentucky/Monticello, date = 1948-10-10 13:07:00 +0000, dstOffset = 0.0)
Setting offset for New York, NY on 6/11/80, to -4.0
(TZ Name = America/New_York, date = 1980-06-11 12:25:00 +0000, dstOffset = 1.0)
Любые подсказки? Что получают другие, когда пробуют Миннеаполис 26.03.70? Время Америки/Меномини определенно соответствует центральному времени, и при смещении летнего времени, равном 0, secondFromGMTForDate определенно должно быть -6 часов, а не -5.