2012-12-17 174 views
0

我想使用週末的日期在NSLocalNotification中使用它,但我不知道如何獲取它,我試圖用數學方法來做,但有時候我得到的數字大於本月的日子。如何獲取週末的日期?

+0

我怕你的描述不足以明白你想要什麼。但看到NSCalendar - 它會給你關於日期的各種信息。 –

+0

請提供您所指的那個不起作用的代碼,並告訴我們您期望它做什麼。這樣我們可以幫助你做到最好。我最好的猜測是你想從當前日期確定下一個星期六? – lnafziger

+0

試試這個http://www.roseindia.net/tutorial/iphone/examples/Current-Date-iPhone-SDK.html,它可以解決你的問題。 – Girish

回答

0

你有關獲取日期第一個問題就可以解決的:

NSCalendar *calender=[NSCalendar currentCalendar]; 
NSRange daysRange=[calender rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:[NSDate date]]; 
NSUInteger numberOfDaysInMonth=daysRange.length; 
//NSLog(@"num of days in current month : %ld",numberOfDaysInMonth); 

NSDateComponents *dateComponents = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; 
NSInteger dayCount=[dateComponents weekday]; 
//if today itself is saturday what you want to display? today or upcoming one... then do small changes here, for sat & sun. 

NSInteger daysForSaturday=7-dayCount; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"dd"]; 
NSUInteger todaysDate = [[formatter stringFromDate:[NSDate date]]integerValue]; 

// NSLog(@"Today is : %@",todaysDate); 

NSUInteger comingSaturday=todaysDate+daysForSaturday;  
if (comingSaturday>numberOfDaysInMonth) { 
    comingSaturday-=numberOfDaysInMonth; 
} 
NSUInteger comingSunday=comingSaturday+1; 

NSLog(@"Coming.. Sat is : %ld, Sun in : %ld",comingSaturday, comingSunday); 
+0

這就是我所做的,但你可能會得到一天中的天數大於一個月中的天數 –

+0

:(我堅持嘗試這種情況...等待我會發布正確的結果,即使月變化和即使是年份的變化...... –

+0

@ZiadTamim:請檢查這段代碼,我已經檢查了這段代碼的下列情況:1.考慮自動轉移到下個月2.對於閏年如果你仍然發現一些錯誤,讓我知道.. :) –

1

需要注意的是IOS支持多種日曆,我不知道,如果使用這些日曆的所有文化都有周末,如果一個概念,他們總是意味着有兩天。

你還需要處理一些事情:即使在使用格里曆的國家,一週也可能從星期一或星期日開始。

但是,如果我們假設一個週末等同於週六和週日,這可能對你有所幫助:

NSDate *referenceDate = [NSDate date]; 
NSDate *startOfThisWeek; 
NSDate *saturday; 

NSUInteger backupStartWeekday = [[NSCalendar currentCalendar] firstWeekday]; 
[[NSCalendar currentCalendar] setFirstWeekday:1]; // ensure week begins at sunday 

[[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit 
           startDate:&startOfThisWeek 
           interval:NULL 
            forDate:referenceDate]; 

NSDateComponents *components = [[NSDateComponents alloc] init]; 
components.day = [[NSCalendar currentCalendar] maximumRangeOfUnit:NSWeekdayCalendarUnit].length; //the start of the next week 

components.day = components.day - 2; 
saturday = [[NSCalendar currentCalendar] dateByAddingComponents:components 
                 toDate:startOfThisWeek 
                 options:0]; 

[[NSCalendar currentCalendar] setFirstWeekday:backupStartWeekday]; 
相關問題