返回时区的GMT偏移量,包括夏令时

时间:2016-07-21 23:17:07

标签: ios objective-c nsstring nsdateformatter

我目前正在尝试将时区的偏移量作为NSString返回。 目前我这样做:

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

但是,我想知道是否有一种简单的方法可以在不解析字符串并获取值的情况下访问此数字。

另外,作为一个附带问题,上面的代码是否考虑了+/-夏令时?

1 个答案:

答案 0 :(得分: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分钟)存在小数小时差异,因此整数值不足