Как узнать текущее смещение часового пояса на устройстве в ЧАСЫ?iPhone: найдите текущее смещение часового пояса в HOURS
ответ
NSDate *sourceDate = [NSDate dateWithTimeIntervalSinceNow:3600 * 24 * 60];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
float timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]/3600.0;
NSLog(@"sourceDate=%@ timeZoneOffset=%d", sourceDate, timeZoneOffset);
Существует очень хороший объект NSTimeZone, который даст вам смещение часового пояса от GMT в секундах:
float timezoneoffset = ([[NSTimeZone systemTimeZone] secondsFromGMT]/3600.0);
подробнее см блоге
http://blog.indieiphonedev.com/2011/01/09/getting-the-timezone-on-the-device/
Помните, что смещение не обязательно является целым числом - некоторые страны имеют половину (или четверть) смещения часа (я вижу, что сообщение упоминает об этом, это на всякий случай, когда люди не читают его). –
Просто хотел добавить, что этот код позволяет избежать некоторых потенциальных ошибок ответа, отмеченного как правильное. –
Ссылка на сообщение в блоге в ответ мертва. – Pang
Не используйте int !!! Я скопировал этот код и теперь имею ошибку в своем приложении. Некоторые часовые пояса являются .5 ч
использовать это:
float offset = [timezone secondsFromGMTForDate:self.date]/3600.0;
и не забывайте .0 за 3600
Для тех, кто ищет для смещения текущего часового пояса в виде строки, попробуйте:
NSDateFormatter *localTimeZoneFormatter = [NSDateFormatter new];
localTimeZoneFormatter.timeZone = [NSTimeZone localTimeZone];
localTimeZoneFormatter.dateFormat = @"Z";
NSString *localTimeZoneOffset = [localTimeZoneFormatter stringFromDate:[NSDate date]];
В моей временной зоне, localTimeZoneOffset
содержит -0700
Спасибо. Сохранял мои часы. –
-(void)getDeviceUTCOffset{
NSDate *date = [NSDate date];
NSTimeZone* deviceTimeZone_ = [NSTimeZone systemTimeZone];
float offset = [deviceTimeZone_ secondsFromGMTForDate:date]/3600.0;
}
Чтобы проверить код - тест на устройстве
изменить устройство Timezone в
Settings > General > Date Time
Turn off SET AUTOMATICALLY
Then tap TimeZone and choose major cities east/west of you
Run code and check float offset
Сравнить значение города на этом сайте
например Heres Хельсинки
Стандартный часовой пояс: UTC/GMT +2 час - по состоянию на ноябрь
http://www.timeanddate.com/worldclock/city.html?n=101
Проверка против стран с британской Summer Time или их эквивалент.
Используйте NSTimeZone в localTimeZon е
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSInteger seconds = [timeZone secondsFromGMT];
NSLog(@"TZ : %@ : Seconds %ld",[timeZone abbreviation],(long)seconds);
int h = (int)seconds/3600;
int m = (int)seconds/60 % 60;
NSString *strGMT = @"";
if (h>=0)
strGMT = [NSString stringWithFormat:@"+%02d:%02d", h, m];
else
strGMT = [NSString stringWithFormat:@"%03d:%02d", h, m];
NSLog(@"GMT -/+ HH:mm: %@",strGMT);
Приведенный выше код не дает правильных значений для отрицательных секундFromGMT и отличных от нуля минут. Я бы предложил заменить условие 'if (0 <= seconds)' и 'else' с помощью' strGMT = [NSString stringWithFormat: @ "-% 02d:% 02d", -h, -m]; ' –
Вот простой способ сделать это в Swift 3:
let offsetInHours = Double(TimeZone.current.secondsFromGMT())/3600.0
- 1. NSDate - Смещение часового пояса
- 2. Получить смещение часового пояса
- 3. Текущее время часового пояса
- 4. смещение часового пояса в asp.net
- 5. Получить смещение часового пояса от имени часового пояса в C++
- 6. Turbo Pascal для DOS - Как получить текущее смещение часового пояса
- 7. Как получить текущее смещение часового пояса (и отформатировано правильно)?
- 8. Получить текущее смещение по GMT для определенного часового пояса
- 9. Смещение числового часового пояса AIX
- 10. codeigniter получить смещение часового пояса
- 11. Date.prototype.setMonth() изменяет смещение часового пояса?
- 12. PHP - странное смещение часового пояса
- 13. Получить смещение от часового пояса
- 14. PHP смещение часового пояса некорректный
- 15. Как получить смещение часового пояса для известной строки часового пояса?
- 16. Получить смещение часового пояса и отображение C#
- 17. Смещение локального часового пояса в PostgreSQL
- 18. Как использовать смещение часового пояса в Nodejs?
- 19. Неправильное смещение часового пояса в лазури
- 20. Получить смещение часового пояса в минутах
- 21. Получить смещение часового пояса в django/python
- 22. Динамическое смещение часового пояса в агрегации elasticsearch?
- 23. Расчет часового пояса
- 24. Как преобразовать имя часового пояса в смещение часового пояса и наоборот в PHP
- 25. Vim script: как восстановить смещение часового пояса?
- 26. android: смещение часового пояса для «Европа/Россия»
- 27. Удаление Смещение часового пояса От DateTimeOffset
- 28. javascript date - сохранить смещение часового пояса
- 29. Выводить имя часового пояса, смещение от аббревиатуры
- 30. oozie dataset смещение часового пояса не работает
Существует два потенциальных проблемы с этим кодом: (1) он должен действительно использовать «localTimeZone» вместо «systemTimeZone» (который обычно заканчивается тем же). (2) sourceDate должен быть [NSDate date], я столкнулся с проблемой, когда timeZoneOffset ошибся на час при использовании заданной даты вне дня. Можете ли вы объяснить, почему вы используете дату источника, отличающуюся от дня? –