我正在尝试获取systemTimeZone,但是它给了我错误的数据:

NSTimeZone * currentDateTimeZone = [NSTimeZone systemTimeZone];
NSString* name = [currentDateTimeZone name];
int myGMT = (int)roundf([currentDateTimeZone secondsFromGMT]/60.f/60.f);


我住在匈牙利的布达佩斯。它在格林尼治标准时间+1,但我正在myGMT = 2.
但是名称可以:name = Europe/Budapest
为什么?

最佳答案

欧洲/布达佩斯时区的当前GMT偏移为GMT + 2,因为
Daylight Saving Time从2014年3月30日星期日开始,时钟是
前进一小时(请参见http://www.timeanddate.com/worldclock/city.html?n=50)。

您可以使用

BOOL isDst = [currentDateTimeZone isDaylightSavingTime];
// --> YES
NSTimeInterval dstOffset = [currentDateTimeZone daylightSavingTimeOffset];
// --> 3600


如有必要,您可以计算

[currentDateTimeZone secondsFromGMT] - [currentDateTimeZone daylightSavingTimeOffset]


以获得您所在时区的“默认” GMT偏移量。

关于ios - 错误的systemTimeZone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23308978/

10-12 03:38