Так что если у вас есть NSDate *today = [NSDate date];
, то вы можете использовать NSDateComponents
для получения относительных дат.
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *today = [NSDate date];
NSDateComponents *yesterdayComponents = [[NSDateComponents alloc] init];
[yesterdayComponents setDay:-1];
NSDate *yesterday = [calendar dateByAddingComponents:yesterdayComponents toDate:today options:0];
[yesterdayComponents release];
NSDateComponents *twoWeeksAgoComponents = [[NSDateComponents alloc] init];
[twoWeeksAgoComponents setWeek:-2];
NSDate *twoWeeksAgo = [calendar dateByAddingComponents:twoWeeksAgoComponents toDate:today options:0];
[twoWeeksAgoComponents release];
И т.д.
NSDateComponents
и NSCalendar
обрабатывает переполнение и переполнение автоматически (если вы не отключите его с помощью бита options:
).Поэтому, если сегодня «28 февраля» и вы хотите «завтра», он автоматически выберет «29 февраля» или «1 марта» в зависимости от года.Это довольно круто.Это также единственный правильный способ манипулирования датой .