来自NSDateComponent的NSDate短1小时?

时间:2011-04-07 15:12:40

标签: iphone objective-c cocoa-touch

当尝试使用NSDateComponent指定日期(即生日)时,我意识到我回来的日期是1小时。

NSDateComponents *birthdayComponents = [[NSDateComponents alloc] init];
[birthdayComponents setDay:5];
[birthdayComponents setMonth:3];
[birthdayComponents setYear:1968];

NSDate *birthday = [[NSCalendar currentCalendar] dateFromComponents:birthdayComponents];
NSLog(@"BIRTHDAY: %@", birthday);
[birthdayComponents release];

OUTPUT: "BIRTHDAY: 1968-03-04 23:00:00 +0000"

我可以通过添加:

来解决这个问题
[birthdayComponents setHour:1];

但很奇怪为什么只设置 5,3,1968 没有给出 1968-03-05 00:00:00 +0000

3 个答案:

答案 0 :(得分:2)

您没有设置birthdayComponents的timeZone属性,因此默认为UTC。从中创建日期时,日期组件将转换为您当地的时区。

答案 1 :(得分:1)

您目前的时区是多少? ;)

当您记录日期时,您的输出显示GMT时间,您可能在您的时区创建它,这是GMT一小时。

答案 2 :(得分:0)

由于夏令时,我遇到了类似的问题 - 获得了0400 vs 0500等等。我通过设置时区和地区来解决这个问题。

// set the locale (for date calculations)
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"es_US"] autorelease];
endDate.locale = locale;