Как узнать текущее смещение часового пояса на устройстве в ЧАСЫ?
IPhone: найдите текущее смещение часового пояса в ЧАСЫ
Ответ 1
NSDate *sourceDate = [NSDate dateWithTimeIntervalSinceNow:3600 * 24 * 60];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
float timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate] / 3600.0;
NSLog(@"sourceDate=%@ timeZoneOffset=%d", sourceDate, timeZoneOffset);
Ответ 2
Есть очень хороший объект NSTimeZone, который даст вам смещение часовой пояс от GMT в секундах:
float timezoneoffset = ([[NSTimeZone systemTimeZone] secondsFromGMT] / 3600.0);
Подробнее см. сообщение в блоге
http://blog.indieiphonedev.com/2011/01/09/getting-the-timezone-on-the-device/
Ответ 3
Для тех, кто ищет текущее смещение часового пояса в виде строки, попробуйте:
NSDateFormatter *localTimeZoneFormatter = [NSDateFormatter new];
localTimeZoneFormatter.timeZone = [NSTimeZone localTimeZone];
localTimeZoneFormatter.dateFormat = @"Z";
NSString *localTimeZoneOffset = [localTimeZoneFormatter stringFromDate:[NSDate date]];
В моей временной зоне localTimeZoneOffset
содержит -0700
Ответ 4
Не используйте int!!! Я скопировал этот код и теперь имею ошибку в своем приложении. Некоторые временные интервалы составляют .5 часов
используйте это:
float offset = [timezone secondsFromGMTForDate:self.date] / 3600.0;
и не забывайте .0 за 3600
Ответ 5
Используйте NSTimeZone localTimeZon e
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);
Ответ 6
-(void)getDeviceUTCOffset{
NSDate *date = [NSDate date];
NSTimeZone* deviceTimeZone_ = [NSTimeZone systemTimeZone];
float offset = [deviceTimeZone_ secondsFromGMTForDate:date] / 3600.0;
}
Чтобы проверить код - тест на устройстве
изменить устройство Часовой пояс в
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
Сравнить значение для городов на этом сайте
например. Херес Хельсинки
Стандартный часовой пояс: UTC/GMT +2 часа - с ноября
http://www.timeanddate.com/worldclock/city.html?n=101
Обратитесь к странам с британским летним временем или их эквивалентом.
Ответ 7
Вот простой способ сделать это в Swift 3:
let offsetInHours = Double(TimeZone.current.secondsFromGMT()) / 3600.0