NSDateに関して1つの質問があります。私は日付が「2011-10-04 07:36:38 +0000」であり、この日付が昨日か、今日か未来の日付かをチェックしたいと思います。指定された日付が今日、昨日、または将来の日付かどうかを確認してください
どうすればいいですか?
NSDateに関して1つの質問があります。私は日付が「2011-10-04 07:36:38 +0000」であり、この日付が昨日か、今日か未来の日付かをチェックしたいと思います。指定された日付が今日、昨日、または将来の日付かどうかを確認してください
どうすればいいですか?
お試しください:
注:必要に応じて日付形式を変更してください。
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSDate* enteredDate = [df dateFromString:@"10/04/2011"];
NSDate * today = [NSDate date];
NSComparisonResult result = [today compare:enteredDate];
switch (result)
{
case NSOrderedAscending:
NSLog(@"Future Date");
break;
case NSOrderedDescending:
NSLog(@"Earlier Date");
break;
case NSOrderedSame:
NSLog(@"Today/Null Date Passed"); //Not sure why This is case when null/wrong date is passed
break;
}
– earlierDate:
– laterDate:
– compare:
これは、iOS開発のため利用できません。 サイトからは、明らかにso: "可用性\t OS X v10.0以降で利用可能です。" – JHHoang
がApple's documentation on date calculationsを参照してください参照してください、ウル必要に応じてfolowingのいずれかを使用します。
NSDate *startDate = ...;
NSDate *endDate = ...;
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
days
が+1と-1、あなたの日付の間にある場合「今日」の候補者です。明らかに、時間をどのように処理するかについて考える必要があります。おそらく最も簡単なことは、問題の日(00:00.00)にすべての日付を設定してから、その値を計算に使用することです。そうすれば、今日は0、昨日は-1、明日は+1、その他の値は同じように将来や過去のどれくらいのものかを伝えます。
これは機能しますが、夏時間の変更に伴うエラーを避けるために、正午(12:00:00)に時間を設定する方がずっと安全です。 – Suz
皮肉なことに、元々は正午までに時間を設定することを提案しましたが、切り捨ての例では深夜に設定していましたが、一貫性を保つことができました。ただし、両方の日付が同じタイムゾーンにある場合は、夏時間の変更が午前2時に行われ、時計を午前1時に設定するため、差はありません。したがって、同じタイムゾーンの2つの日付は同じカレンダーの日付に切り捨てられます昼光の節約に関わらず。 –
実際にタイムゾーンを考慮したい場合は、他の操作を行う前に、両方の日付を同じタイムゾーンに変換するのが最善の方法です。 –
-(NSString*)timeAgoFor:(NSString*)tipping_date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:tipping_date];
NSString *key = @"";
NSTimeInterval ti = [date timeIntervalSinceDate:[NSDate date]];
key = (ti > 0) ? @"Left" : @"Ago";
ti = ABS(ti);
NSDate * today = [NSDate date];
NSComparisonResult result = [today compare:date];
if (result == NSOrderedSame) {
return[NSString stringWithFormat:@"Today"];
}
else if (ti < 86400 * 2) {
return[NSString stringWithFormat:@"1 Day %@",key];
}else if (ti < 86400 * 7) {
int diff = round(ti/60/60/24);
return[NSString stringWithFormat:@"%d Days %@", diff,key];
}else {
int diff = round(ti/(86400 * 7));
return[NSString stringWithFormat:@"%d Wks %@", diff,key];
}
}
私はこれを使用しましたが、何とか今日は決して来なかったので、日付。残りはうまく動作します。最後に、時間をそれと比較していた問題を得ました。それに応じて調整しなければならなかった – ChArAnJiT
他のケースでは入力しないように、各case文の後に改行が必要です。 –
これは決して "今日"を返すことはないことに注意してください - NSDateは特定の瞬間を表しますので、NSOrderedSameは(本質的に)決して起こりません – Tim