NSDate结果来自 - (NSDate *)dateFromComponents:(NSDateComponents *)comps

时间:2012-04-10 17:13:52

标签: objective-c nsdate nscalendar nsdatecomponents nstimezone

我想使用NSDateComponents获取NSDate对象,但NSDate的小时比组件中的小1小时。

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setLocale:[NSLocale currentLocale]];
[cal setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *hourComp = [[NSDateComponents alloc] init];
hourComp.timeZone = [NSTimeZone localTimeZone];
[hourComp setHour:18];

NSLog(@"%@",hourComp);
NSLog(@"%@",[cal dateFromComponents:hourComp]);
NSLog(@"%@",[NSDate date]);

控制台输出:

2012-04-10 19:10:57.505 TestDate[9861:f803] <NSDateComponents: 0x6b6ad30>
TimeZone: Europe/Berlin (CEST) offset 7200 (Daylight)
Hour: 18
2012-04-10 19:10:57.507 TestDate[9861:f803] 0001-01-01 17:06:32 +0000
2012-04-10 19:10:57.508 TestDate[9861:f803] 2012-04-10 17:10:57 +0000

我想要的是18:xx:xx

1 个答案:

答案 0 :(得分:0)

我注意到你在欧洲,比GMT提前一小时。当您将日期设置为18:xx时,它认为您在欧洲设置它,因此它在将其存储在GMT之前减去一小时。当你把它打印出来时,你不是要求它在本地时间格式化,所以它给你GMT,即17:xx。

您需要使用NSDateFormatter,并设置其区域设置和时区 - 就像使用NSCalendar对象一样 - 然后在其上调用stringFromDate,将您的日期传递给您已经创造了。