Системный часовой пояс против выбранного часового пояса - PullRequest
3 голосов
/ 25 октября 2011

Какой лучший способ сравнить два часовых пояса?

У меня возникла проблема при сравнении двух NSTimeZone экземпляров с использованием метода - (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone.

NSString *timeZoneName = ...

NSTimeZone *sytemTimeZone = [NSTimeZone systemTimeZone];
NSTimeZone *selectedTimeZone = [NSTimeZone timeZoneWithName:timeZoneName];

if ([sytemTimeZone isEqualToTimeZone:selectedTimeZone]) 
    isEqual = YES;  
else 
    isEqual = NO;

Шаг 1: Перейдите в Настройки (Приложение)> Общие> Дата и время> Часовой пояс и найдите «Остин».Запись, которую вы получите, будет "Остин, США".Выберите этот часовой пояс.Это СЛЕДУЕТ быть вашим новым системным часовым поясом сейчас!

Шаг 2: Создайте небольшое приложение для iPhone / iPad.Используйте [NSTimeZone knownTimeZoneNames], чтобы получить список названий часовых поясов.Тогда попробуйте найти «Остин».Это не там!Итак, я думаю, мы можем использовать «Америка / Чикаго» в качестве часового пояса?

Почему список часовых поясов настройки отличается от нашего?

Шаг 3: Теперь сравните часовой пояс системы с часовым поясом для "Америка / Чикаго".Они не совпадают.

1 Ответ

3 голосов
/ 24 ноября 2011

Я опубликовал ошибку для этого - ошибка состоит в том, что Остин не находится в списке известных часовых поясов, пока предлагается приложением настроек.

Согласно Apple Engineer:

Для двух NSTimeZones для сравнения равны, как имена, так и данные (как возвращает -data) должен быть равен. Вы должны быть осторожны, когда сравнение часовых поясов, потому что две зоны могут иметь одинаковое смещение от GMT, но не быть таким же часовым поясом по историческим причинам. Помните что часовые пояса используются для всех видов календарных расчетов, Это означает, что они равны, только если на протяжении всей истории они всегда было одинаковое смещение по Гринвичу, одни и те же переходы на летнее время, и т. д.

...