2014-03-18 2 views
0

У меня есть ярлык, который я хочу провести определенную дату. Первоначальная дата должна быть текущей датой, и пользователь должен иметь возможность выполнить время через интервал дня. После небольшого исследования выяснилось, что было бы лучше установить NSDateComponents и добавить их в текущую дату.NSDate - Добавление дней не изменяет значения года

Моя проблема заключается в следующем: когда я перехожу через время, все кажется прекрасным, пока я не дойду до конца/начала года. Например, удержание даты на ярлыке - 01.01.2014, когда я нажимаю «предыдущий день», это станет 31.12.2014. Я подумал о том, чтобы просить дату, а затем установить год вручную, но я не могу думать о том, что это решение.

Так вот мой код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self setupInterface]; 
} 
- (void)setupInterface{ 
    orderDate = [NSDate date]; 
    [self updateDateLbl]; 
} 

- (void)updateDateLbl{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"dd.MM.YYYY"]; 
    dateLbl.text = [dateFormatter stringFromDate:orderDate];  
} 

- (IBAction)nextDay:(id)sender { 
    NSDateComponents *comps = [[NSDateComponents alloc]init]; 
    comps.day = 1; 

    orderDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:orderDate options:0]; 
    [self updateDateLbl]; 
} 

- (IBAction)previousDay:(id)sender { 
    NSDateComponents *comps = [[NSDateComponents alloc]init]; 
    comps.day = -1; 
    orderDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:orderDate options:0]; 
    [self updateDateLbl]; 
} 

Я хотел бы некоторую помощь :)

ответ

3

Использование Xcode помощь для NSDateFormatter. Из документации:

Он использует yyyy для указания компонента года. Общей ошибкой является использование ГГГГ. yyyy указывает календарный год, тогда как YYYY указывает год («Неделя года»), используемый в календарном году ISO год. В большинстве случаев yyyy и YYYY дают одинаковое число, однако они могут быть разными. Как правило, вы должны использовать календарный год.

2014 год начался в среду. Вторник, 31 декабря 2013 года, находится на той же неделе - неделе 1 2014 года. Это то, что показывает ГГГГ. yyyy отображает 2013.

+0

После небольшого поиска я нашел источник этой цитаты, он очень хорошо спрятан. В любом случае, большое спасибо. Итак, этот формат YYYY подсчитывает год, в котором находится неделя между 1-52? – Cr44zy