3

这有点奇怪,但是否可以使用 NSCalendar(或任何组件)来确定下一个“本月的第一个星期二”的日期是什么?

例如,今天是 2010 年 3 月 25 日星期四。下一个“本月的第一个星期二”将是 4 月 6 日。同样,如果我要在 4 月 1 日寻找下一个“本月的第一个星期二”,它仍然是4月6日。

你会怎么做?

非常感谢!!!!!

4

2 回答 2

4

下面的代码计算给定月/年组合的第一个星期二。它是用MacRuby编写的,因为这是我刚刚尝试过的,但是将它转换为正确的 Objective-C 应该没有问题,它只是一种不同的语法(我喜欢 MacRuby,因为它可以快速尝试一个想法):

dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4

dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month

cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"

我把它留给你来确定给定日期的“下一个第一个星期二”:首先计算当前日期的月份,如果结果是过去,则在下个月再次计算。用于-[NSCalendar components:fromDate:]获取给定 NSDate 的月/日组合。

于 2010-03-25T14:50:13.273 回答
1

不幸的是,我无法验证此代码的无能,但有些代码应如下所示:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setMonth:5]; // May
[components setYear:2008];
[components setWeekdayOrdinal:1]
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

有关示例和详细信息,请参阅本指南

于 2010-03-25T14:45:56.560 回答