我正在尝试从NSDate
获取小时组件。
这是我的工作:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+1"]];
NSDateComponents *startComponents = [calendar components:DATE_COMPONENTS fromDate:_start];
startComponents.timeZone = [NSTimeZone timeZoneWithName:@"GMT+1"];
int hours = [startComponents hour];
在昨天之前,hours value
总是提前一小时。但是从昨天起hours value
提前了2个小时。
我知道这与NSTimezone
和DST
有关。但我无法理解我的想法!
有人能帮助我吗?
答案 0 :(得分:1)
"GMT+1"
未被识别为时区名称,因此
[NSTimeZone timeZoneWithName:@"GMT+1"]
是nil
而当地时区代替使用,可能会在您所在的国家/地区上周末从冬季(GMT + 01)切换到夏令时(GMT + 02)。
用"GMT+1"
替换"GMT+01"
:
[NSTimeZone timeZoneWithName:@"GMT+01"]
// or alternatively:
[NSTimeZone timeZoneForSecondsFromGMT:3600]
起作用并给出预期的结果。
请注意,设置NSCalendar
的时区就足够了。设置时区
在这种情况下NSDateComponents
没有效果。