首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDateComponents中的错误日期

NSDateComponents中的错误日期
EN

Stack Overflow用户
提问于 2013-12-24 18:41:00
回答 2查看 113关注 0票数 0

我正在创建一个NSDate。为什么一天总是少一天?

这是代码:

代码语言:javascript
复制
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comps = [gregorian components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:today];
[comps setDay:31];
NSDate *lastDayOfMonth = [gregorian dateFromComponents:comps];
NSLog(@"last %@",lastDayOfMonth);

这是日志:

代码语言:javascript
复制
last 2013-12-30 23:00:00 +0000

结果是30而不是31

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-24 18:56:48

代码语言:javascript
复制
last 2013-12-30 23:00:00 +0000

这是因为你被展示为格林尼治时间--也就是伦敦的时间。但你不在伦敦。我不知道你在哪里,但如果你想一想,你就会意识到,当伦敦时间是30日23时,你所处的位置是31日午夜,这正是你所要求的。

票数 1
EN

Stack Overflow用户

发布于 2013-12-24 18:53:40

  • NSDate日期返回“立即”
  • 您要求的是日期的年份、日期和月份,而不是时间元素。
  • 你把这一天定为31天
  • 您要求日历在没有时间的情况下将31/本月份/今年转换为NSDate
  • 记录NSDate在UTC中打印出时间,由于它没有小时和分钟,这些时间显然设置为23:00,即在正确日期前一小时。

简而言之,对我来说,这似乎是一个时区或夏令时。

所有这些日历时间-计算可能非常混乱,所以一个一般性的建议:观察WWDC 2012和WWDC 2013关于日历计算(特别是2012年版本)。

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

https://stackoverflow.com/questions/20765433

复制
相关文章

相似问题

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