目前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或者没有。我将只获得接收器偏移值。我必须支持不同的时区()..这样做的最佳方法是什么
答案 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的秒数每年必须改变两次。但是,由于您要求固定的秒数,您得到的结果不会这样做,并且从不报告夏令时有效。