Я создал категорию NSDate, которая дала бы мне дату «последнего воскресенья».
+(NSDate *)sunday{
// I need 2 dates yesterday and today
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSLog(@"Current date: %@", now);
NSDateComponents *components = [gregorian components:(NSWeekCalendarUnit | NSWeekdayCalendarUnit ) fromDate:now];
[components setWeekday:1]; //Monday
[components setHour:0]; //8a.m.
[components setMinute:0];
[components setSecond:0];
NSLog(@"Sunday: %@", [gregorian dateFromComponents:components]);
return [gregorian dateFromComponents:components];
}
Это дает мне пару разных дат:
IOS 4.2
Sunday: 0001-08-28 05:50:36 +0000
IOS 4.1
Sunday: 0001-09-04 05:50:36 GMT
Обратите внимание То, что IOS 4.1 дает мне будущую дату, тогда как IOS 4.2 дает мне предыдущую дату, что я и хочу.
Я понимаю, что показывается год 0001, но год не используется.
Я еще не нашел, где другие имеют такую же проблему, поэтому, возможно, я делаю что-то не так.Но я не уверен, что это такое.Кто-нибудь видел это раньше?
РЕДАКТИРОВАТЬ Вот мой рабочий код:
+(NSDate *)sunday{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [gregorian components:(NSWeekCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit ) fromDate:now];
[components setWeekday:[gregorian firstWeekday]]; //Sunday
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
return [gregorian dateFromComponents:components];
}
Спасибо !!