【问题标题】:NSCalender returns wrong yearNSCalender 返回错误的年份
【发布时间】:2013-12-30 12:18:50
【问题描述】:

我从 dateFromComponents 得到 2012 年,而我当前的日期是 2013 年。为什么会这样?我没有在任何地方更改年份。

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comp = [cal components:NSCalendarUnitYear fromDate:[NSDate date]];

NSLog(@"%ld", (long)[comp year]); //2013

NSLog(@"%@", [cal dateFromComponents:comp]); // 2012-12-31 23:00:00 +0000

【问题讨论】:

  • TimeZone/NSLocale 问题,我猜?
  • 你检查过你的系统时间,检查设备并看到同样的情况
  • @SteveJobs 我确实从设备上检查过。在我测试的每台设备上都是这样。
  • 你总是得到“2012-12-31 23:00:00 +0000”??您必须非常幸运才能始终获得该日期/时间。在我看来,您并没有向我们展示所有代码。

标签: ios iphone nsdate nscalendar


【解决方案1】:

您的转换将日历中的时区考虑在内,在这种情况下,您可能不希望仅将日期拆分为组件。将时区设置为 GMT,它应该会给你想要的结果;

[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 

【讨论】:

  • 如果我设置时区,我会得到 2013-01-01 00:00:00 +0000。正确的年份,但错误的月份和日期
  • @Toydor 是的,这正是 2013 年新的一年,它的 2013 年是正确的。由于您使用的是 components:NSCalendarUnitYear,因此您可以得到所有年份。您的预期结果是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多