2013-08-12 2 views
3

Если пользователь находится в восточном направлении, я не хочу отображать «EST» или «EDT», но если это не так, я хочу его отобразить.Сравнение правил часовых поясов iOS

Есть ли простой способ сравнить правила TimeZone в iOS?

[NSTimeZone localTimeZone] возвращает Америку/Индианаполис, но я просто хочу знать, если он восточный.

Сравнение данных не работает, просто я сравниваю secondsFromGMT?

EDIT Сравнивая смещения, похоже, работает, но я не знаю, не вызовет ли это проблемы позже?

ответ

1

Вы можете использовать [[NSTimeZone localTimeZone] abbreviation];, чтобы получить аббревиатуру независимо от часового пояса пользователя находится в.

Это дает сокращение текущей даты (EDT, если не летние и EST, если декретное, в вашем случае). Если вы хотите сократить конкретную дату, вы можете использовать abbreviationForDate: и вставить любую дату.

Here is some more information about NSTimeZone

Edit:

Если вы хотите на самом деле сравнивать несколько временных зон (как проверить, если это текущий часовой пояс или нет), вы можете использовать isEqualToTimeZone:. Если это не соответствует вашим потребностям, посмотрите на некоторые из других методов NSTimeZone в этой ссылке.

+1

Я думаю, что я где-то читал, что не совсем безопасно, потому что EST присутствует как в Америке, так и в Австралии? – dewyze

+0

@JDewzy Аббревиатура для австралийского восточного стандартного времени - [AEST] (http://en.wikipedia.org/wiki/Time_in_Australia) – Caleb

+1

Аббревиатура зависит от языкового стандарта. – uchuugaka

0

У меня было много боли от решения проблем часового пояса в нашем приложении для инструментов, включая планирование событий по часовым поясам. Названия часовых поясов не были дружественными к использованию. Кроме того, летнее время - большая боль.

Что работал последовательно для меня звонки, как это с помощью timeZoneForSecondsFromGMT

Я также конвертировать мои сохраненные даты по Гринвичу, то я могу установить их по местному времени на дисплее.

NSTimeZone *zone = [NSTimeZone systemTimeZone]; 
NSInteger timeZoneOffset = [zone secondsFromGMT]; 


[self.dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeZoneOffset]]; 
+0

Вы всегда его обнуляете? Или это был только пример? – dewyze

+0

К сожалению, это был пример того, как я использовал его при нормализации всех времен в GMT для определенного проекта. Это был плохой пример. – HalR

+0

Если вы отредактируете свой ответ, чтобы больше ответить на мой вопрос, я соглашусь с ним. Потому что, согласно Android, их метод hasSameRules просто отсчитывает секунды от GMT, и это похоже на то, что вы пытались получить? Или я должен просто опубликовать решение, которое я собрал с сайта Android в сочетании с тем, что вы сказали? – dewyze

Смежные вопросы