【发布时间】:2012-12-12 14:20:14
【问题描述】:
给定一个任意日期,我需要找到该月下一周第一天的日期。请注意,它并不像在当前日期上增加 7 天那么简单,因为该月的最后一周可能少于 7 天。这是我现在使用的代码:
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekOfMonthCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit fromDate:currentDate];
NSLog(@"week of month: %ld", [components weekOfMonth]);
[components setWeekOfMonth:[components weekOfMonth] + 1];
NSLog(@"new week of month: %ld", [components weekOfMonth]); //week of month is now 2
[components setWeekday:1];
NSDate *nextWeek = [calendar dateFromComponents:components];
例如,currentDate 设置为 2012-10-01。在此示例中,nextWeek 始终为 2012-10-01。似乎发送setWeekOfMonth: 不会增加NSDateComponents 对象中的其他日期组件。是我配置了错误的日期组件,还是 setWeekOfMonth: 不应该那样工作?
【问题讨论】:
-
假设您的一周从星期一开始,今天是 12 月 27 日,那么您希望 12 月 31 日作为您的答案吗?
-
是的,没错,假设 currentCalenar 设置为使用星期一作为一周的第一天。如果将星期日设置为一周的第一天,则 nextWeek 将是 12 月 30 日。
-
StackOverflow: NSCalendar first day of week
-
@MikeT :我已经发布了另一个答案,请告诉我,这是否再次正确?
标签: cocoa nsdate nscalendar nsdatecomponents