web-dev-qa-db-ja.com

2つのNSDateオブジェクトを引く

重複の可能性:
iPhoneで時差を取得する方法

JSONフィードから日付と時刻を取得しています。フィードから取得した日付と今日の日付と時刻の違いを見つける必要があります。どうすればこれを行うことができますか?

現在の日付とフィードから取得した日付を減算する必要があることはわかっていますが、それを行う方法がわかりません。

例:

フィードからの日付:Date: 2011-06-10 15:00:00 +0000今日:Date: 2011-06-10 14:50:00 +0000

違いが10分であることを表示する必要があります。

ありがとう!

24
Magnus

NSDateの-dateWithString:を使用して文字列から2つのNSDateオブジェクトを作成し、次に2つのNSdateオブジェクトの差を使用して取得します

NSTimeInterval diff = [date2 timeIntervalSinceDate:date1];
54
Sascha

比較する前に、入力日付をNSDateオブジェクトに変換する必要があります。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss +0000"];
NSDate *startDate = [dateFormatter dateFromString:yourJSONDateString];
NSDate *endDate = [NSDate date];

CGFloat minuteDifference = [endDate timeIntervalSinceDate:startDate] / 60.0;

フォーマッタは、UTCオフセットが常にゼロであることを前提としています。これが当てはまらない場合は、使用できる他の形式コードについて Microsoftの日付形式文字列ページ を参照してください。

-

編集:他の誰もが使用しているdateWithStringメソッドは、状況に応じて使用する方が適切ですが、取得する日付フォーマット文字列が正確でない場合は、日付フォーマッターが必要です。正しい形式で日付を送信するAPIを使用したことはないと思います。たぶん運が悪かっただけでしょう:-(。

4
kubi

以下のコードから、2つのNSDateオブジェクトを比較するためのアイデアが得られます。

NSDate *dateOne = [NSDate dateWithString:@"2011-06-10 15:00:00 +0000"];
NSDate *dateTwo = [NSDate dateWithString:@"2011-06-10 14:50:00 +0000"];

switch ([dateOne compare:dateTwo])
{
    case NSOrderedAscending:
         NSLog(@”NSOrderedAscending”);
         break;
    case NSOrderedSame:
        NSLog(@”NSOrderedSame”);
        break;
    case NSOrderedDescending:
       NSLog(@”NSOrderedDescending”);
       break;
}
0
Jhaliya