NSCalendar NSDateComponents weekofYear返回1,日期为2014-12-31

时间:2014-12-31 03:20:24

标签: objective-c nscalendar nsdatecomponents

我希望以'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”,如何解决?

3 个答案:

答案 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告诉你的更实用的方法。