데이터 유형이 NSTimeInterval
인 것을 알고 있지만 이것은 초 단위입니다. 6 월 21 일 목요일 8:00 - 6 월 21 일 목요일 9:00에 시간 범위를 나타낼 수있는 객체 표현이 필요합니다. 나중에 현재 날짜/시간을 비교하여이 범위 내에 맞는지 확인하고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?객관적인 시간 간격을 나타내는 -
2
A
답변
3
두 개의 NSDate 개체를 사용하여 시작 날짜와 종료 날짜를 저장하는 것이 좋습니다. 날짜가 그들 사이에 있다면 당신은 쉽게 timeIntervalSinceDate:
방법을 사용하여 확인할 수 있습니다
- (BOOL)dateInInterval:(NSDate *)testDate {
// date1 is the instance variable containing the starting date
// date2 is the instance variable containing the ending date
return ([testDate timeIntervalSinceDate:date1] > 0 &&
[testDate timeIntervalSinceDate:date2] < 0);
}
당신은 단지 첫 번째 전에 있는지 확인하고,이 방법을 포함하여,이있는 NSDate 객체를 보유하는 클래스를 확인해야합니다.
FYI, NSTimeInterval은 클래스가 아니며 double 유형 정의입니다.
편집
당신이, 당신이 당신의 데이터를 저장하고 검색하려면이 비슷한을 사용할 수있는 사전에 대한 키로 이것들을 사용합니다 이후 :
@protocol IntervalDictionaryKey <NSObject>
// The class you use as keys for your dictionary must implement this method to determine if a object is in the interval
- (BOOL)intervalContains:(id)object;
@end
@interface IntervalDictionary : NSObject {
NSMutableArray *keys, *values;
}
- (void)addInterval:(id<IntervalDictionaryKey>)interval withObject:(id)object;
- (void)setObject:(id)object forIntervalOf:(id)intervalObject;
- (id)objectForIntervalOf:(id)object;
@end
@implementation IntervalDictionary
- (id)init {
if(self = [super init]) {
keys = [NSMutableArray new];
values = [NSMutableArray new];
}
return self;
}
- (void)dealloc {
[keys release];
[values release];
[super dealloc];
}
- (void)addInterval:(id<IntervalDictionaryKey>)interval withObject:(id)object {
[keys addObject:interval];
[values addObject:object];
}
- (void)setObject:(id)object forIntervalOf:(id)intervalObject {
id<IntervalDictionaryKey> key;
NSUInteger i = 0;
for(key in keys) {
if([key intervalContains:intervalObject]) {
[values replaceObjectAtIndex:i withObject:object];
break;
}
++i;
}
}
- (id)objectForIntervalOf:(id)object {
id<IntervalDictionaryKey> key;
NSUInteger i = 0;
for(key in keys) {
if([key intervalContains:object]) {
return [values objectAtIndex:i];
}
++i;
}
}
@end
사용법 :
예 간격 클래스 :
@interface DateInterval : NSObject <IntervalDictionaryKey> {
NSDate *date1, *date2;
}
- (BOOL)intervalContains:(NSDate *)date; // this is the same as the dateInInterval method above
@end
@implementation DateInterval
// initializer which sets date1 and date2
- (BOOL)intervalContains:(NSDate *)date {
return ([date timeIntervalSinceDate:date1] > 0 &&
[date timeIntervalSinceDate:date2] < 0);
}
@end
사용 예제 코드 :
//intervalX is a DateInterval object, created elsewhere
//objectX is any object, created elsewhere
//objectInX is a NSDate which is part of intervalX, created elsewhere
IntervalDictionary *dict = [IntervalDictionary new];
[dict addInterval:interval0 withObject:object0];
[dict addInterval:interval1 withObject:object1];
[dict objectForIntervalOf:objectIn0]; // returns object0
[dict objectForIntervalOf:objectIn1]; // returns object1
[dict setObject:object2 forIntervalOf:objectIn1]; // changes the object for interval1 to object2
[dict objectForIntervalOf:objectIn1]; // now returns object2
0
NSDateComponents 시간 간격의 구성 요소뿐만 아니라 날짜 구성 요소를 저장하는 데 사용할 수 있습니다. 이러한 객체를 NSCalendar의 dateByAddingComponents:toDate:options:
을 사용하여 NSDate에 추가 할 수 있습니다.
관련 문제
- 1. 평균 시간 간격을 계산하십시오
- 2. 타이머의 시간 간격을 변경하십시오.
- 3. 날짜/시간 간격을 구현하는 방법
- 4. 초 단위로 시간 간격을 초기화하는 방법
- 5. 시간 간격을 설정하기위한 안드로이드 UI 요소
- 6. joda-lib와 오른쪽 경계가없는 시간 간격을 비교하십시오.
- 7. cocos2d에서 애니메이션의 시간 간격을 어떻게 계산합니까?
- 8. 복잡한 시간 다중 간격을 표현하는 언어는 무엇입니까?
- 9. 앱 엔진에서 시간 간격을 설정하는 방법
- 10. UIDatePickerModeCountDownTimer 모드에서 UIDatePicker의 시간 간격을 어떻게 구합니까?
- 11. UISlider에 시간 간격을 0.02로 설정하는 방법
- 12. 겹치는 날짜/시간 간격을 어떻게 분할합니까? (조직 모드 시간)?
- 13. POST 요청에 대해 NSMutableURLRequest 시간 초과 간격을 고려하지 않았습니다.
- 14. JFreeChart를 사용하여 시계열/XYPlots에서 시간 간격을 버리는 방법은 무엇입니까?
- 15. C에서 두 날짜 사이의 시간 간격을 얻는 방법
- 16. 순수 자바 스크립트에서 단어의 시간 간격을 정의하는 방법은 무엇입니까?
- 17. 다른 행에있는 두 날짜 간의 시간 간격을 계산하십시오.
- 18. NSDate를 사용하여 시작 지점에서 시간 간격을 측정하려면 어떻게합니까?
- 19. TFS 2010에서 보고서 생성을위한 시간 간격을 어떻게 변경합니까?
- 20. 이 테이블에서 시간 간격을 GROUP BY하는 방법이 있습니까?
- 21. 자바 스크립트에서 시간 간격을 어떻게 설정할 수 있습니까?
- 22. Java에서 시간/날짜 간격을 계산하고 형식을 지정하는 쉬운 방법이 있습니까?
- 23. Grails. 세션의 시간 초과 간격을 설정하는 방법 더 낫지?
- 24. TextBox에서 문자 입력 사이의 시간 간격을 얻으려면 C#
- 25. 플레이어 이동과 AI 이동 사이의 시간 간격을 계산하는 방법
- 26. C 프로그래밍 이벤트 사이의 시간 간격을 찾는 방법
- 27. autoComplete에서 키보드를 칠 때 시간 간격을 설정하는 방법은 무엇입니까?
- 28. dateTimePIcker를 사용하여 타이머 간격을 설정하십시오.
- 29. UTC C에서 # datetime 문자열을 밀리 초 단위로 나타내는 시간 소인 #
- 30. 시간을 나타내는 GUI 컨트롤
날짜가 항상 같은 날짜 인 경우 답변이 변경 되나요? – aherlambang
그러면 참조 날짜의 오프셋을 저장할 수 있지만 사용시 큰 차이는 없습니다. – ughoavgfhw
문제는 시작 날짜와 종료 날짜가 변경되고 있다는 것입니다. – aherlambang