2009-06-04 2 views
0

나는 NSTimeInterval을 가지고 있는데, 타임 스탬프가 날짜의 시작과 끝 사이에 있는지 여부를 알고 싶습니다. 내 NSTimeInterval가있는 NSDate 객체와 같은 날에 떨어지는 경우 알아낼 정직 방법이 있습니까임의의 NSDate 중에 NSTimeInterval이 발생했는지 확인하는 방법은 무엇입니까?

NSDate *today = [NSDate date]; 
NSTimeInterval myInterval = someInterval; 

[date returnYesIfFallsThisDate:myInterval]; 

: 기본적으로 내가 좋아하는 뭔가를 할 수 있어야합니다?

감사합니다.

답변

1

NSTimeInterval은 단지 몇 초입니다. 이것을 NSDate와 비교하려면, 어떤 참조 점에 상대적인 시간 간격을 해석 한 다음 결과가있는 NSDate를 작성한 다음 두 NSDate를 비교해야합니다.

표준 참조 날짜는 2001-01-011970-01-01입니다 (후자는 "UNIX 시간"입니다). 올바른 참조 날짜가 아니면 NSCalendar를 사용하여 올바른 참조 날짜에 대한 NSDate를 만든 다음 create your NSDate of interest relative to that을 만듭니다.

비교를 위해.

캘린더의 날짜가 신경 쓰이는 경우 NSDate를 만든 다음 NSCalendar를 사용하여 날짜의 NSDateComponents를 가져옵니다. 특히 년, 월, 일을 구한 다음 비교해보십시오.

"시작"및 "종료"시간에 대해 걱정할 필요가 없습니다. 실제로 달력의 날짜 만 신경 쓰는 경우 시간대를 완전히 무시할 수 있습니다.

+0

피터의 요점이 유효 해 보입니다. 사람들이 동의한다면 NSCalendar를 사용하여이 종류의 날짜 비교를 수행하는 것이 더 바람직하다는 데 동의한다면 답변을 철회 할 것입니다. – danielpunkass

+0

헤이 피터, 귀하의 게시물은 매우 유용합니다. 지혜를 공유해 주셔서 다시 한 번 감사드립니다. Daniel, 귀하의 게시물은 다른 민감한 문제와 관련하여 도움이되었습니다. 감사합니다. Peter의 직책은 직접적으로 주제를 다룹니다. 고마워요. –

1

개념 상 목표 날짜의 "시작"과 "끝"을 구성하는 두 개의 날짜가 필요합니다. 그런 다음 해당 날짜의 각 시간 간격에 대해 직접 시간 간격을 테스트 할 수 있습니다.

예를 들어 샌프란시스코에 거주하는 경우 "시작"은 태평양 표준시로, 시작일은 태평양 표준시로 11시 59 분 59.99999 초가됩니다.

당신은 파악하면 어떤 시간대/등 당신이 방금 테스트를 할 시간 간격을 사용하여 시작과 끝 점으로 고려할 :

if ((myInterval >= [earlyMorningDate timeIntervalSinceReferenceDate]) && 
    (myInterval <= [lateEveningDate timeIntervalSinceReferenceDate])) 
{ 
    NSLog(@"Whoo hoo - it's the right date!"); 
} 
+0

오후 12시는 정오입니다. 아마도 11 : 59 : 59.99999를 의미할까요? –

+0

고마워, 피터. 예 ... 편집되었습니다. – danielpunkass

1

명심있는 NSDate 어떤 형태로든 "일"을 나타내지는 않습니다. NSCalendar (일반적으로 사용자의 기본 달력)를 사용하여 변환 된 NSDateComponents로 약간의 작업을 수행하여 시작 및 끝 NSDate 값을 계산하고이를 사용하여 시간 간격을 비교합니다.

하루 종일 NSDate를 가져 와서 NSDateComponents로 변환하지만 시간, 분 또는 초가 없어도됩니다. 여기에 당신이 시작하는 데 도움이 빠른 (안된) 예제 : 씨 Jalkut에 의해 제안

NSDateComponents *comps = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 
NSDateComponents *day = [[[NSDateComponents alloc] init] autorelease]; 
[day setDay:1]; 
NSDate *start = [[NSCalendar currentCalendar] dateFromComponents:comps]; 
NSDate *end = [[NSCalendar currentCalendar] dateByAddingComponents:day toDate:start options:0]; 

가 그런 다음 시간 간격을 비교할 수 있습니다 (또는 다른 방법,있는 NSDate는 몇 가지 다른 방법으로 NSTimeIntervals 작업 할 수 있습니다). 나는 분명히 NSCalendar와 NSDateComponents를 워드 프로세서에서 살펴 보는 데 약간의 시간을 할애 할 것이다. 내가해야 할 일에 대해 제안하고있는 것보다 나은 방법을 찾을 수있다.

1

나만인가, 아니면 OP는 NSTimeInterval이 A에서 B까지 시간 간격을 나타내는 것이라고 생각하는 것입니까? 나는. 날짜 A에서 날짜 B까지의 절대 거리 (초)

원래의 질문은 참조 날짜를 기준으로 찾을 필요가 있다고 표시해야합니다. 이런 식으로 뭔가가 :

NSDate *refDate = someReferenceDate; 
NSTimeInterval interval = someInterval; 
NSDate *today = [NSDate date]; 
BOOL isInRange = false; 

isInRange = [today isInterval:interval inRangeFromReference:refDate]; 

그럼 그 방법은 Damiel, 베드로와 마크 위에서 언급 일부를 사용 (또는 모든 부분)을 startegies의 것입니다.

관련 문제