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)
有什么建议?
问题可能是设置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)