从NSDate获取小时组件

时间:2014-03-31 15:00:39

标签: ios iphone objective-c nsdatecomponents nstimezone

我正在尝试从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个小时。

我知道这与NSTimezoneDST有关。但我无法理解我的想法!

有人能帮助我吗?

1 个答案:

答案 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没有效果。