NSCalendar dateFromComponents 返回错误的日期 2

Ste*_*hev 5 components calendar nsdate nsdatecomponents ios

我想找出一年中第一周的日期:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:1];
[components setWeekOfMonth:1];
[components setWeekday:1];
NSDate *newDate = [calendar dateFromComponents:components];
NSLog(@"%@",newDate);
Run Code Online (Sandbox Code Playgroud)

我得到的是:

2012-12-29 23:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

当我与我的 mac 日历进行比较时,我需要得到的是:

2012-12-31 23:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

有什么建议?

nsg*_*ver 0

问题可能是设置weekDay 这里是工作代码

 NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setYear:2013];
    [components setMonth:1];
    [components setDay:1];

    NSDate *newDate = [calendar dateFromComponents:components];
    NSLog(@"%@",newDate); //2012-12-31 23:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

你可以使用其他替代品NSGregorianCalendar,而不是currentCalender

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
[comp setYear:2013];
[comp setMonth:1];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
NSLog(@"%@",firstDayOfMonthDate);  // 2012-12-31 23:00:00 +0000
Run Code Online (Sandbox Code Playgroud)