첫 번째 트릭은 원하는 날짜를 얻는 것입니다.
-(NSDate*)dateAtHour:(NSInteger)hour {
NSDate *localDate = [self toLocal];
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:localDate];
comps.hour = hour;
comps.minute = 0;
comps.second = 0;
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *date = [gregorian dateFromComponents:comps];
return [date toUTC];
}
-(NSDate *) toLocal {
NSTimeZone *tz = [NSTimeZone localTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
-(NSDate *) toUTC {
NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"UTC"];
NSInteger seconds = [tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
그런 다음 당신은 단지에 대한 NSTimer을 예약 할 필요가 : 여기 당신이해야 할 수도 있습니다 무엇을 같은 예입니다 특정 날짜/시간 :
- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
그러나 앱이 배경에있을 수 있습니다. 이 경우 앱이 전경에있는 동안이 시간별 문제가 발생하기를 원한다고 가정합니다. 이 경우 타이머를 앱 위임의 '시작'메소드 중 하나에서 설정하십시오.
toLocal? toUTC? 이 방법을 어디에서 얻고 있습니까? 또는 당신은 이것이 fleshed 될 것이라고 가정하고 있습니다. (또한, 감사합니다 : - D) –
+1 날짜 구성 요소를 사용하여 NSTimer에 대한,하지만 당신은 U 앞에서에만 응용 프로그램을 실행하고 싶지 생각해야합니까? –
우, 내가 서둘렀다 고 생각해. dateAtHour는 NSDate의 카테고리입니다. toLocal 및 toUTC를 제거 할 수 있으며 시간대 지원이 필요한 경우 내 편집을 참조하십시오. – ax123man