如何在目标c中获得该月的第n个星期天日期?

如何在对象C编码中获得第一个星期日或第n个星期日或星期一(任何一天)日期。

例如: – 我只想每年在我的应用程序中显示友谊日的日期。

但是,友谊来自8月的第一个周日。所以,日期将每年都在变化。 在这里,我需要找到每年8月的第一个星期日的日期。

我需要最好的逻辑来找到第n个星期日的日期。 请说出逻辑,谢谢

您需要创建一个NSDateComponents对象并设置适当的值,在您的示例中,您将执行以下操作:

NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; dateComponents.year = 2011; // set the current year or whatever year you want here dateComponents.month = 8; dateComponents.weekday = 1; // sunday is 1, monday is 2, ... dateComponents.weekdayOrdinal = 1; // this means, the first of whatever weekday you specified 

要将其转换为NSDate对象,您只需:

 //you may want to use another calendar object here NSDate *myDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; [dateComponents release]; //don't forget memory management ;) 

您希望将NSDateComponentsNSCalendardateFromComponents:方法结合使用:

 NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *c = [[NSDateComponents alloc] init]; [c setYear:2012]; [c setWeekday:1]; // Sunday [c setWeekdayOrdinal:3]; // The 3rd Sunday for (int i = 1; i <= 12; i++) { [c setMonth:i]; NSDate *date = [gregorian dateFromComponents:c]; NSLog(@"Date[%i]: %@",i,date); } [c release]; [gregorian release]; 

这是一个例子。 您可以在“ 日期和时间编程指南”中找到更多信息。

要找到八月的第一个星期天:

 NSDateComponents *components = [[NSDateComponents alloc] init]; [components setWeekday:1]; // Sunday [components setWeekdayOrdinal:1]; // The first Sunday in the month [components setMonth:8]; // August [components setYear:2011]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *date = [gregorian dateFromComponents:components]; 

你检查一个月的第一天。

 unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorian components:units fromDate:date]; 

使用[组件日]获取一天; 星期日<-1。这之后很简单。

您需要在此处查看NSCalendar类。

特别感兴趣的是方法- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date