나는 데이터를 저장하기 위해 코어 데이터를 사용하는 응용 프로그램을 작성 중입니다. 여기에는 시간이 아닌 데이트에만 관심이있는 데이트 필드가 포함됩니다.시간 요소가없는 날짜를 만드는 NSDate 모범 사례
+ (NSDate *)dateWithNoTime:(NSDate *)dateTime {
if(dateTime == nil) {
dateTime = [NSDate date];
}
NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:dateTime];
NSDate *dateOnly = [[NSCalendar currentCalendar] dateFromComponents:comps];
[dateOnly dateByAddingTimeInterval:(60.0 * 60.0 * 12.0)]; // Push to Middle of day.
return dateOnly;
}
난 후, 다음과 같이 설정된 시간에, 정규화 된 날짜를 반환하는 I 날짜 (안 시간)을 기준으로 기록을 선택해야하고 그래서있는 NSDate에 카테고리를 만들었습니다 핵심 데이터 저장소에 데이터를 추가 할 때이 메서드를 사용합니다 (기본 데이터 값을 설정하는 데이 메서드를 사용하는 설정자가 있음). 그리고이 메서드를 사용하여 가져 오기 요청을 수행 할 때 날짜를 비교하는 데 사용하는 날짜를 만듭니다. . 이론적으로 이것은 항상 작동해야합니다 - 즉 내가 찾고있는 날짜를 고르는 것.
시간대 나 로케일을 변경하면 어떤 영향을 미치는지 완전히 확신 할 수 없으므로 약간 긴장됩니다. 여전히 작동할까요?
시간에 관심이없는 경우에만 날짜를 저장하고 검색 할 때 모범 사례로 간주되는 것은 무엇입니까?
건배.
토론을 읽은 후 편집
내가 다음과 같이 일하려면 코드를 수정해야한다고 생각 좋습니다. 특정 달력 시스템과 특정 표준 시간대 (UTC)로 푸시해야한다면 날짜를 설정할 때와 읽은 날짜에 관계없이 날짜가 항상 동일해야합니다. 이 새로운 코드에 대한 의견은 높이 평가되었습니다.
+ (NSDate *)dateWithNoTime:(NSDate *)dateTime {
if(dateTime == nil) {
dateTime = [NSDate date];
}
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:dateTime];
NSDate *dateOnly = [calendar dateFromComponents:components];
[dateOnly dateByAddingTimeInterval:(60.0 * 60.0 * 12.0)]; // Push to Middle of day.
return dateOnly;
}
솔루션을 제공해 주셔서 감사합니다. : D 조금만 보정 : 라인 : '[dateOnly dateByAddingTimeInterval (60.0 * 60.0 * 12.0)]' 가되어야한다 'dateOnly = dateOnly dateByAddingTimeInterval (60.0 * 60.0 * 12.0)]; ' –