2009-06-04 4 views
0

私はNSTimeIntervalを持っており、そのタイムスタンプが日付の開始と終了の間にあるかどうかを知りたいと思います。私NSTimeIntervalはNSDateオブジェクトと同じ日に当たるかどうかを把握するためにまっすぐ進む方法があります任意のNSDateの間にNSTimeIntervalが発生したかどうかを調べる方法は?

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

[date returnYesIfFallsThisDate:myInterval]; 

:基本的に私のような何かを行うことができるようにする必要がありますか?

ありがとうございます。

答えて

1

NSTimeIntervalはほんの数秒です。それをNSDateと比較するには、ある基準点を基準にした時間間隔を解釈し、その結果を含むNSDateを作成し、次に2つの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、あなたの投稿は、私が扱っている他の問題にも役立ちました。ピーターのポストは、手元のトピックを直接扱っています。ありがとうございました。 –

1

概念的には、目的の日付の「開始」と「終了」を構成する2つの日付が必要です。次に、それらの日付のそれぞれの時間間隔に対して時間間隔を直接テストすることができます。

例えば、私がサンフランシスコに住んでいれば、 "スタート"は太平洋夏時間12時間、最後は太平洋時間11時59分59.99999になります。

あなたが開始点と終了点として検討する必要が何時間帯に/ etc考え出したら、あなただけのテストを行うための時間間隔を使用することができます。

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

12 PMは正午です。おそらく、11:59:59.99999という意味ですか? –

+0

ありがとう、ピーター。はい...編集されました。 – danielpunkass

1

NSDateことを覚えておいてくださいどのような形であれ「一日」を表すわけではありません。 NSCalendar(通常はユーザーのデフォルトカレンダー)を使用してNSDateComponentsを使って少しの作業をして、開始NSDate値と終了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の一部(または全部の部分)を使用します。

関連する問題