与我预期的设置相反,来自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属性的正确计算?
答案 0 :(得分:0)
NSDateComponents
只是其元素的简单容器。神奇发生在计算NSCalendar
个对象的NSDate
方法中。
因此,将组件转换为正确的日期,而不是返回NSDateComponents
。
由于您无法计算一年,一月和一周中的一周中的一周(一周中通常有两周的年),您必须选择要检查的日期,例如星期一。