2016-07-21 3 views
0

В настоящее время я пытаюсь вернуть смещение часового пояса как NSString. В настоящее время я делаю это:Return GMT offset часовой пояс, включая летнее время

NSDateFormatter *df = [NSDateFormatter new]; 

[df setDateFormat:@"dd/MM/yyyy HH:mm"]; 

//Create the date assuming the given string is in GMT 
df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

//Create a date string in the local timezone 
df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone localTimeZone].secondsFromGMT]; 
NSString *timezoneStr = [NSString stringWithFormat:@"%@", df.timeZone]; 

NSLog(@"date = %@", timezoneStr); 

//returns 
//GMT-0500 (GMT-5) offset -18000 

Что я хотел бы сделать, это вернуться просто:

-5 

Однако, я хотел бы знать, если есть простой способ получить доступ к этому номеру без разбора через строку и принимая значение.

Кроме того, в качестве побочного вопроса, учитывается ли код, приведенный выше, +/- летнее время?

+0

Вы хотите UTC смещения часового пояса или определенный часовой пояс? – Paulw11

+0

местный часовой пояс телефона. – HurkNburkS

ответ

3

Если вы хотите, чтобы UTC смещение в часах для местного времени зоне вы можете использовать следующее:

-(NSString *) UTCOffset { 
    NSTimeZone *localTZ = [NSTimeZone localTimeZone]; 
    float offset = localTZ.secondsFromGMT/3600.0; 
    return [NSString stringWithFormat:@"%g",offset]; 
} 

Возвращаемое значение будет включать в себя какие-либо сбережения дневного света офсетных если декретное действует в данный момент. В частности, когда DST действует, местный часовой пояс изменяется на «эквивалент DST» стандартного часового пояса. например мой часовой пояс меняется с «Австралийского восточного стандартного времени (UTC + 10)» на «Австралийское восточное летнее время (UTC + 11)».

Следует также отметить, что некоторые временные зоны имеют дробный час отличается от UTC (30 минут), так что целое значение не является достаточным

+0

отлично поработал – HurkNburkS

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