简体   繁体   English

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

[英]How to get n-th Sunday date of the month in objective c?

How to get first sunday or nth sunday or monday (any day) date in Objective C coding. 如何在Objective C编码中获得第一个星期日或第n个星期日或星期一(任何一天)日期。

For example :- I just want to show date of friendship day in my app every year. 例如: - 我只想每年在我的应用程序中显示友谊日的日期。

But, friendship comes 1st Sunday of Aug. So, date will change every year. 但是,友谊来自8月的第一个星期日。因此,日期将每年都在变化。 here I need to find what is the date of 1st Sunday in Aug every year. 在这里,我需要找到每年8月的第一个星期日的日期。

is there any logic to find the date of nth Sunday. 是否有任何逻辑可以找到第n个星期天的日期。

You need to create a NSDateComponents object and set the appropriate values, In You example you would do: 您需要创建一个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

To convert this into a NSDate-object, you just do: 要将其转换为NSDate对象,您只需执行以下操作:

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

You want to use NSDateComponents in combination with NSCalendar 's dateFromComponents: method: 您希望将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];

Here's an example. 这是一个例子。 You can find more information in the Date and Time Programming Guide . 您可以在“ 日期和时间编程指南”中找到更多信息。

To find the first Sunday in August: 要找到八月的第一个星期天:

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];

you check the first day of the month. 你检查一个月的第一天。

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

Get the day using [components day]; 使用[组件日]获取一天; <-1 for Sunday.After this it's simple. 星期日<-1。这之后很简单。

You'll want to review the NSCalendar class here. 您需要在此处查看NSCalendar

Of specific interest will be the method - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date 特别感兴趣的是方法- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM