首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSDate结果来自-(NSDate *)dateFromComponents:(NSDateComponents *)comps

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

Stack Overflow用户
提问于 2012-04-11 01:13:52
回答 1查看 244关注 0票数 1

我想用NSDateComponents获取一个NSDate对象,但是NSDate的时间比在组件中慢了1个小时。

代码语言:javascript
运行
复制
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]);

控制台输出:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 02:14:34

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10093272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档