날짜에서 YEAR, MONTH 및 DAY 구성 요소를 사용하여 날짜를 0 시간, 0 분, 0 초로 설정하는 다음 코드가 있습니다. :예상 된 결과가 아닌 시간을 설정하는 NSDate
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
NSDate *newDate = [gregorian dateFromComponents:comps];
NSLog(@"date: %@, newDate: %@", date, newDate);
출력은 다음과 같습니다
date: 2012-11-06 11:44:09 +0000, newDate: 2012-11-05 23:00:00 +0000
하지만 새로운 날짜가 될 것으로 예상했다 : 2012-11-06 00:00:00 +0000
내가 아는 것을 무슨 일 ?
위의 포맷터 설정을 사용하여 날짜를 인쇄하는 것은 동일합니다. 서머 타임이 NSDate 작성 또는 달력에 미치는 영향에 대한 설명을 제공 할 수 있습니까? – SolidSun
일광 절약 시간은 장치/사용자 설정의 시간대를 고려하여'[NSDate date]'의 결과에 영향을줍니다. 다른 시간대를 사용하면 다른 시간대와 관련하여 날짜를 결정할 수 있습니다. 내 대답에 대한 편집을 참조하십시오. – CaptainRedmuff
@CaptainRedmuff "일광 절약 시간이 [NSDate date]의 결과에 영향을 미칩니다.": 그건 사실이 아닙니다. 'NSDate'는 달력, 시간대, 로케일 등의 영향을받지 않습니다. NSDate는 절대 시간을 나타냅니다. –