NSDateComponents在2012年的第一周表现得很奇怪

时间:2012-01-04 15:39:27

标签: 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。

1 个答案:

答案 0 :(得分:-1)

我发现此代码的行为符合您的预期

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

它看似合法,但文件并没有多说,所以使用它需要你自担风险。 ^ ^