에 의해 자체를 상쇄받을 수있는 recurringproblemformany (me included)와 당겨 한 후 내 머리 방법 너무 오래 나는 마침내 문제를 해결했다.
- 당신이
- 당신이 원하지
- 당신이 당신의 날짜 계산은 어떤 일광 절약 시간에 잊기로 원하는 시간, 날짜에 관심이 :
이 코드에 의존 가정
는 점이다 당신이 그것을 유지할 수있는 날짜와 같은 문자열 표현이 쉽다. 양력으로 초기화 내가 사용하는 독특한 NSCalendar 인스턴스를 1을 실현하려 위해
, GMT 이 또한 NSDateFormatter이 독특한 달력 및 모두 초기화 3. 2.
를 제공의 시간대. 포맷터의 시간대를 계산에 사용되는 달력의 시간대로 설정하면 내가 가진 모든 문제의 핵심이었습니다!
NSDate * today = [DateModel normalize: [NSDate date]] ;
NSString*todayS= [DateModel dateToString: today] ;
BOOL alwaysTrue=[[DateModel normalize: [NSDate date]] isEqual: [DateModel stringToDate: todayS]] ;
이 여기에 코드입니다 :
이 항상 진실해야합니다 (아래의 코드를 가정은 DateModel
클래스의 일부이다)
+ (NSDate *) normalize: (NSDate *) date {
NSDateComponents * comps = [[DateModel calendar] components:NSYearCalendarUnit
| NSMonthCalendarUnit
| NSDayCalendarUnit
| NSHourCalendarUnit
| NSMinuteCalendarUnit
| NSSecondCalendarUnit
fromDate:date] ;
[comps setHour:0] ;
[comps setMinute:0] ;
[comps setSecond:0] ;
NSDate * dateOnly = [[DateModel calendar] dateFromComponents:comps] ;
return dateOnly ;
}
+ (NSCalendar *) calendar {
static NSCalendar * calendar = nil ;
if (calendar == nil) {
calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] ;
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation: @"GMT"] ;
}
return calendar ;
}
+ (NSDateFormatter *) dateFormatter {
static NSDateFormatter * formatter = nil ;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init] ;
[formatter setCalendar:[self calendar]] ; // <- This is
[formatter setTimeZone:[self calendar].timeZone] ; // <- critical
[formatter setDateFormat:@"yyyyMMdd"] ;
}
return formatter ;
}
+ (NSDate *) dateFromString: (NSString *) stringDate {
return [DateModel normalize: [[DateModel dateFormatter] dateFromString:stringDate]] ;
}
+ (NSString *) stringFromDate: (NSDate *) date {
return [[DateModel dateFormatter] stringFromDate:[DateModel normalize: date]] ;
}
희망이 누군가를하는 데 도움이!