Подтвердить что ты не робот

IPhone: найдите текущее смещение часового пояса в ЧАСЫ

Как узнать текущее смещение часового пояса на устройстве в ЧАСЫ?

4b9b3361

Ответ 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