Objective-C / iOS:获取某一周的特定date(星期日)
我需要在当周得到某一天(星期天)的date。 我使用这个date来确定是否应该发生每周重置,并且我在最近的重置date前做了一些计算是在星期date之前等。这主要是问了很多次,而且我的解决scheme已经在过去6个月工作了。 但今天,2013年12月29日,它停止工作。
目前使用的function:
+ (NSDate *) getSundaysDate{ NSDate *currentDate = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [gregorian setFirstWeekday:1]; NSDateComponents *components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit) fromDate:currentDate]; NSDateComponents *dt = [[NSDateComponents alloc]init]; [dt setWeek:[components week]]; [dt setWeekday:1]; [dt setMonth:[components month]]; [dt setYear:[components year]]; return [gregorian dateFromComponents:dt]; }
这曾经像一个魅力工作,但今天,在我的应用程序,这将返回:
NSLog(@"sundaysDate %@", [Util getSundaysDate]); sundaysDate 2012-12-29 23:00:00 +0000 NSLog(@"Current date %@", [[NSDate date] debugDescription]); Current date 2013-12-29 11:37:23 +0000
注意2012年。
我知道这已经有好几次了,在不同的情况下,所以我提前道歉,但是我根本没有得到2012年。
编辑 – 只是为了阐明所需的function:
每周从星期天开始(第1天)
星期六(第7天)结束
鉴于目前的date,我需要一周的第一天的date。
Example 1: today is 29th December 2013 Expected: Sunday is 29th December 2013 Example 2: today is 4th January 2014 Expected: Sunday was 29th December 2013 Example 2: today is 8th January 2014 Expected: Sunday was 5th January 2014
我想你需要使用WeekOfMonth
而不是Week
。
NSWeekCalendarUnit
基本上是一年中的一周,因此指定它和月份是冲突的。
请注意, NSWeekCalendarUnit
已过时:
弃用声明
取而代之的是使用weekOfYear
或weekOfMonth
,具体取决于你的意图。
NSDate *currentDate = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [gregorian setFirstWeekday:1]; NSDateComponents *components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit) fromDate:currentDate]; [components setWeekday:1]; NSDate *sundatsData = [gregorian dateFromComponents: components]; NSLog(@"sundaysDate: %@", sundatsData);
NSLog输出:
sundaysDate:2013-12-29 05:00:00 +0000