NSDateComponents weekOfMonth不会改变weekOfYear

时间:2013-09-02 10:27:38

标签: ios nsdate nscalendar nsdatecomponents

与我预期的设置相反,来自NSDateComponents对象的weekOfMonth属性对weekOfYear没有影响......

NSDateComponents *iterativeComponents = [calendar components:   NSYearCalendarUnit|
                                                                        NSMonthCalendarUnit|
                                                                        NSWeekOfYearCalendarUnit|
                                                                        NSWeekOfMonthCalendarUnit|
                                                                        NSWeekdayCalendarUnit
                                                            fromDate:referenceDate];

for (int j = 4; j > -1; j--) {
    iterativeComponents.weekOfMonth = j;
    NSDate *dateForWeek = [calendar dateFromComponents:iterativeComponents];
}

设置iterativeComponents的weekOfMonth并不会改变weekOfYear并留下不一致的NSDateComponents对象:

<NSDateComponents: 0x9aac9e0>
Calendar Year: 2012
Month: 9
Leap month: no
Week of Year: 36
Week of Month: 3
Weekday: 2

快速查看日历告诉我,2009年9月的第三周是一年中的第37周。 iterativeComponents生成的日期是

2012-09-02 22:00:00 +0000

如何通过设置weekOfMonth来实现对weekOfYear属性的正确计算?

1 个答案:

答案 0 :(得分:0)

NSDateComponents只是其元素的简单容器。神奇发生在计算NSCalendar个对象的NSDate方法中。

因此,将组件转换为正确的日期,而不是返回NSDateComponents

由于您无法计算一年,一月和一周中的一周中的一周(一周中通常有两周的年),您必须选择要检查的日期,例如星期一。