NSDateComponents 및 NSDateFormatter에서 이상한 결과가 나타납니다.NSDateComponent에서 잘못된 NSDate 가져 오기 2011-01-01
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"]];
에만 두 번째 줄, 나는 예기치을 얻을 :
나는 다음과 같은 통화를하는 동안
+ (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;
}
지정된 날짜의 오전 10시 시간을 설정하려면 다음 방법을 결과 :
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에서 2로 바뀝니다. 011-12-31 그냥 시간을 10으로 설정하면됩니다.
에 너무 nslog 신청 같아요. –
아, 잘 찾아 냈어! 나는 그것도 간과했다. – sradforth