Это правильный способ добавить дни к NSDate, используя NSDateComponents? - PullRequest
0 голосов
/ 17 февраля 2012

Я использую метод ниже, чтобы добавить или вычесть дни из NSDate.

Когда я регистрирую значения, я иногда получаю неожиданный результат.

Вот один из случаев:1005 *

//This adds X days to the current Date and returns to the user
+(NSDate*)getRelativeDateInDays:(NSInteger)days forDate:(NSDate*)date{


    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents = [[NSDateComponents alloc] init];
    [weekdayComponents setDay:days];
    NSDate *newDate = [gregorian dateByAddingComponents:weekdayComponents toDate:date options:0];
    [gregorian release];
    [weekdayComponents release];
    NSLog(@"start Date : %@ End Date %@",date,newDate);

return newDate;}

ДЕЛО 1:

2012-02-17 06: 28: 14.474 Дата начала применения [2906: 707]: 2012-03-08 11:26:23 +0000 Дата окончания 2012-03-09 11:26:23 +0000 Количество дней 1

СЛУЧАЙ 2:

2012-02-17 06:29: 00.631 Приложение [2906: 707] Дата начала: 2012-03-10 11:26:23 +0000 Дата окончания 2012-03-11 10:26:23 +0000 Количество дней 1

В случае 1, когда я добавил один день в 2012-03-08 11:26:23 +0000, я получил 2012-03-09 11:26:23 + 0000.

Но когда я добавил один день в2012-03-10 11:26:23 +0000 Я получаю 2012-03-11 10:26:23 + 0000.

1 час дополнительно сокращен. В чем может быть проблемаВот?Кто-нибудь сталкивался с этой проблемой?

1 Ответ

2 голосов
/ 17 февраля 2012

Это связано с переходом на летнее время - переход на летнее время в США начинается 11 марта.

Edit:

Вы можете решить эту проблему, преобразовав введенную дату в объект компонентов даты, изменив компонент дня (время не изменяется), а затем преобразовав обратно в NSDate.

...