2014-03-31 30 views
0

我试图从NSDate获取小时组件。 这里是我做的:从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有关。但是我不能把我的头围上来!

有人可以帮我吗?

+3

可能时区从GMT + 1更改为GMT + 2欧洲夏令时...有一些方法来检查日期是否在DST之内或... – Volker

+0

但似乎当我尝试设置[NSTimeZone timeZoneWithName :@“GMT + 2”]没有任何变化。 – Steaphann

+0

可能是由于原始日期,但很难说没有更多的信息 – Volker

回答

1

"GMT+1"不被识别为一个时区的名字,让

[NSTimeZone timeZoneWithName:@"GMT+1"] 

nil本地时区代替使用,这可能是从冬季(GMT + 01)到夏季切换(GMT +02)上周末在你的国家。

"GMT+01"更换"GMT+1"

[NSTimeZone timeZoneWithName:@"GMT+01"] 
// or alternatively: 
[NSTimeZone timeZoneForSecondsFromGMT:3600] 

作品,并给出了预期的结果。

请注意,设置NSCalendar的时区已足够。在这种情况下,设置NSDateComponents的时区 不起作用。