2010-03-25 145 views
3

这有点奇怪,但是可以使用NSCalendar(或任何组件)来计算下一个“第一个日期这个月的星期二“会是?使用NSCalendar - 获取下一个月的第一个星期二

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

你会如何做到这一点?

非常感谢!!!!!

回答

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的月/日组合。

+0

简直太棒了! – 2010-03-25 15:06:34

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

+0

谢谢,但这只是硬编码的日期。我需要能够动态地找出我要找的日期是... – 2010-03-25 14:50:48

+0

当然可以。这只是示例:-) – Victor 2010-03-25 14:52:30

+1

这不起作用。你需要包含'[setWeekdayOrdinal:1];'。 – 2010-03-25 14:57:15

相关问题