这有点奇怪,但有可能使用NSCalendar(或任何组件,就此问题)来确定下一个“本月第一个星期二”的日期是什么?
例如,今天是2010年3月25日星期四。下一个“本月的第一个星期二”将在4月6日。同样,如果我在4月1日寻找下一个“本月的第一个星期二”,它仍然会在4月6日。
你会怎么做?
非常感谢!!!!!
答案 0 :(得分: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的月/日组合。
答案 1 :(得分: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];
有关示例和详细信息,请参阅此guide