NSTimeZone isDaylightSavingTime给出了错误的值

时间:2017-03-14 12:01:03

标签: ios objective-c dst nstimezone

目前GMT-0700(美国/太平洋)已经白天节省了光线

但我得到了#34; NO"来自NSTimeZone

NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:secondsFromGMT]; //Getting timezone as GMT-0700 
BOOL isDaylightSavingTime = [timeZone isDaylightSavingTime]; //getting boolean value as NO

如何解决此问题?

要求:我想知道,我的接收器正在使用dayLightSavingTime或者没有。我将只获得接收器偏移值。我必须支持不同的时区()..这样做的最佳方法是什么

3 个答案:

答案 0 :(得分:2)

timeZoneForSecondsFromGMT不够具体。

最准确的方法是使用(完整)区域名称创建时区:

NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];

答案 1 :(得分:1)

这不是错误的值。你得到时区GMT-0700,但这不是太平洋时区。要创建太平洋时区,您需要:

timeZone = [NSTimeZone timeZoneWithName:@"PST"];

这是Apple文档的简短描述:

  

+(instancetype)timeZoneForSecondsFromGMT:(NSInteger)秒;

     

说明返回格林威治标准时区偏移的时区对象   时间按给定的秒数。新时区的名称是   GMT +/-偏移量,以小时和分钟为单位。 用此创建的时区   方法永远不会有夏令时,并且偏移量是常数no   这个日期很重要。

答案 2 :(得分:0)

提及timeZoneWithName的其他答案是正确的,但还有一个我认为没有提及的细节。 timeZoneForSecondsFromGMT不起作用的原因是GMT没有夏令时(或夏令时,因为在其他一些国家更明智地称之为)。 GMT不会前进或后退;它总是以每秒一秒的速度前进。由于您要求GMT的固定秒数,结果也没有GMT。如果它给你一个观察夏令时的时区,GMT的秒数每年必须改变两次。但是,由于您要求固定的秒数,您得到的结果不会这样做,并且从不报告夏令时有效。