我想用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
发布于 2012-04-11 02:14:34
我注意到你在欧洲,比格林尼治标准时间早一个小时。当您将日期设置为18:xx时,它会认为您是在欧洲设置日期,因此它会在将日期存储到GMT之前减去一个小时。当您将其打印出来时,您并不是要求将其格式化为本地时间,因此它会给出GMT,即17:xx。
您需要使用一个NSDateFormatter,并设置它的区域设置和时区-就像您对NSCalendar对象所做的那样-然后对它调用stringFromDate,传递您创建的日期。
https://stackoverflow.com/questions/10093272
复制相似问题