2012-12-17 119 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]; 
相关问题