그 24 개까지 값이 포함됩니다 두 변수 .. 그것은 당신이 상대 값을 가질 수 있도록 추가 할 것을 .. 오늘부터 HOURS를 나타내는
확인 될 것입니다 절대 값입니다. 추가 작업이 필요합니다.
먼저 "오늘은 무엇입니까?"를 결정해야합니다. 12시 1 분인가요? 있다면, 어떤 시간대? 그리니치 표준시? 다른 것? 너 은입니다. 그리니치 표준시 12시 1 분은 동부 표준시로 오전 12시 1 분과 똑같지 않습니다. 그래서 : 오늘은 무엇입니까?
을에서 측정 할 위치를 결정했으면 해당 시점을 나타내는 NSDate
을 구성해야합니다. 예를 들어
:
NSDate *rightNow = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:rightNow];
이 당신에게 일정에 상대적으로 시간 에 지점을 나타내는 개체 인 NSDateComponents
객체를 제공 할 것입니다. 이 경우 "현재 캘린더"(아마도 그레고리력이지만 반드시 그렇지는 않음)를 사용하고 있으며 기본 시간대는 현재 시간대입니다. 다른 표준 시간대를 기준으로해야하는 경우 새 NSTimeZone
개체를 만들고 -[NSCalendar setTimeZone:]
을 사용하여 날짜 구성 요소를 요구하기 전에 일정의 표준 시간대를 설정할 수 있습니다.
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
그런 다음 우리가 시간에 절대 점 만들기 위해 NSDate
로 다시 설정할 수 있습니다 : 이제, 우리는 적절한 시간에 일을 "재설정"할 수있는 날짜 구성 요소를 가지고 있음을
:
NSDate *startingPoint = [calendar dateFromComponents:components];
지금 우리는 우리의 출발점을 가지고 있고, "오늘부터 시간"를 처리 할 수 있습니다. 첫째, 우리는 구성 요소가 있지만 많은 시간을 차이를 나타내는 객체의 날짜를 만듭니다 것은 :
NSInteger hourDelta = var1/24;
NSDateComponents *delta = [[NSDateComponents alloc] init];
[delta setHour:hourDelta];
이제, 우리는 우리의 절대 시작일이 상대적 차이를 추가 할 것입니다 :
NSDate *finalDate = [calendar dateByAddingComponents:delta toDate:startingPoint options:0];
때문에를 (당신이 쓰레기 수거를 사용하거나 ARC 컴파일하지 않는 한) 우리는 좋은 시민이야, 우리는 우리의 기억을 정리합니다 :
[delta release];
몇 가지 중요한 노트 :
NSCalendar
은 "하루"가 의미하는 것과 "시간"이 무엇인지 정의하기 때문에 모든 조작은 NSCalendar
개체를 통해 수행됩니다. "하루에 24 시간, 한 시간에 60 분이라고 생각합니다."하지만 반드시 그런 것은 아닙니다. 하루에 10 시간, 한 시간에 10 분씩 내 캘린더를 만들 수 있습니다. 원한다면 "지구를 1 회전"하는 것 이외의 다른 일로 "하루"를 정의 할 수 있습니다. NSCalendar
은이 모든 규칙을 정의합니다. 따라서, 날짜의 모든 상대적인 조작 ("시간"및 "일"또는 기타를 추가)은 달력을 통해 수행되어야합니다.
NSDate
에 대한 방법이 있습니다. 예를 들어 -dateByAddingTimeInterval:
과 같지만 절대 간격을 처리 할 때는 이 아니고이 아닌 상대적인 값입니다.
이것은별로 의미가 없습니다. var1이란 무엇입니까? 1970 년 이래로 몇 분? –