我希望以'2014-12-31'的日期获得一周,但它总是返回1而不是52 这是我的代码:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:[NSDate date]];
NSlog(@"%i",dateComponent.weekOfYear);
output "1";
我知道结果是对的,但我想要“52”而不是“1”,如何解决?
答案 0 :(得分:1)
另一种方法是使用yearForWeekOfYear
实例的NSDateComponents
属性。如果yearForWeekOfYear
是在传递给components:fromDate:
的日期之后,则为第52周。
E.g。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSYearForWeekOfYearCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:[NSDate date]];
NSInteger weekOfYear = dateComponent.weekOfYear;
if (dateComponent.yearForWeekOfYear > dateComponent.year)
weekOfYear = 52;
NSLog(@"%i",weekOfYear); // 52
答案 1 :(得分:0)
在获取日期组件之前设置NSCalendar
实例的minimumDaysInFirstWeek
属性。
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.minimumDaysInFirstWeek = 7; // the week has to be completely within one year
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:[NSDate date]];
NSLog(@"%i",dateComponent.weekOfYear); // 52
答案 2 :(得分:0)
如果一周是1(2015年的第一天或2014年的最后几天)
这一天大于20(所以它是2014年最后三天之一)
那么(计算你的约会的一周减去5天,然后加1)。
这将使一年中的最后几天进入他们自己的一周,有时是52周,有时是53周。它适用于欧洲和美国的日历。
如果1月1日是去年的最后一周,你需要考虑你想做什么。可能会让它成为第0周。所以真正符合标准并接受iOS告诉你的更实用的方法。