Я получаю какой-то странный результат от NSDateComponents и NSDateFormatter.
У меня есть следующий метод для установки часа на 10 утра для данной даты
+ (NSDate *)getTenOClockOnDate:(NSDate*)inputDate
{
NSCalendar *cal = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *components = [cal components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit ) fromDate:inputDate];
[components setHour:10];
[components setMinute:0];
[components setSecond:0];
// construct new date and return
NSDate *newDate = [cal dateFromComponents:components];
NSLog(@"input date: %@ -- new date: %@", inputDate, newDate);
return newDate;
}
В то время как я делаю следующий вызов:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2010-12-31"]];
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2011-01-01"]];
[MyUtils getTenOClockOnDate:[dateFormatter dateFromString:@"2011-01-02"]];
только во второй строке, я получаю неожиданный результат:
input date: 2010-12-31 05:00:00 GMT -- new date: 2010-12-31 15:00:00 GMT
input date: 2011-01-01 05:00:00 GMT -- new date: 2011-12-31 15:00:00 GMT
input date: 2011-01-02 05:00:00 GMT -- new date: 2011-01-02 15:00:00 GMT
Проблема на второй записи, 2011-01-01, она превращается в 2011-12-31, просто установив час на 10.