1

我想用 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

4

1 回答 1

0

我注意到你在欧洲,比格林威治标准时间早一小时。当您将日期设置为 18:xx 时,它认为您将其设置在欧洲,因此它会在将其存储在 GMT 之前减去一小时。当您将其打印出来时,您不会要求将其格式化为当地时间,因此它会为您提供 GMT,即 17:xx。

您需要使用NSDateFormatter, 并设置其区域设置和时区 - 就像您对NSCalendar对象所做的那样 - 然后调用stringFromDate它,传递您创建的日期。

于 2012-04-10T18:14:34.030 回答