簡體   English   中英

如何在目標c中獲得該月的第n個星期日日期?

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

如何在Objective 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM