ios - NSDateComponents 在 2012 年第一周表现异常

标签 ios nscalendar nsdatecomponents

在我的 iOS 应用程序中,我必须根据当前日期创建一周。

这是一段代码:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setWeek:week];
[components setWeekday:2];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

在这种特殊情况下,年份是 2012 年,星期是 1。我希望日历返回 2012-01-02,因为那是 2012 年第 1 周星期一的日期。但它返回的是 2012-12 -30.

更新时区:

NSDateComponents *components = [[NSDateComponents alloc] init];    
[components setYear:2012];
[components setWeek:1];
[components setWeekday:2];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [gregorian dateFromComponents:components];

仍然返回 2012-12-30。

最佳答案

我发现这段代码的行为符合你的预期

[components setYearForWeekOfYear:year];
[components setWeekOfYear:week];
[components setWeekday:2];

它看起来合法,但文档并没有说明太多,所以使用它需要您自担风险。 ^^

关于ios - NSDateComponents 在 2012 年第一周表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729527/

相关文章:

ios - 我如何解决 ios8 的日期问题

objective-c - NSDateComponents:weekOfYear 和 weekOfMonth 的区别

ios - -[NSCalendar 组件 :fromDate:toDate:options] always returns 0 diff

ios - 如何创建过去的新 NSDate 对象,例如比另一个日期早 1 秒?

ios - 在连接的两端执行相同的身份验证数学

ios - 将全局变量的值从 .m 获取到另一个 .m

iOS 从年中的某一天获取日期

ios - AVCaptureSession 和相机线程未关闭 [iOS]

ios - 另一个“NSInvalidArgumentException:无法识别的选择器发送到实例”帖子

ios - NSCFCalendar dateFromComponents : components cannot be nil