0

配列を解析していて、今までのレコードを除外したいと考えています。

私はこのコードを持っています:

int i = 0;
    for (i=0; i < tempArray.count; i++) {
        currentObjectArray = tempArray[i];
        NSString *dateString = [currentObjectArray valueForKey:@"ScheduleTime" ];
        NSDate *schedule = [dateFormatter dateFromString:dateString];
        NSLog(@"schedule: %lu", (unsigned long) schedule );
        NSLog(@"now: %lu", (unsigned long)[NSDate date] );

        NSTimeInterval distanceBetweenDates = [schedule timeIntervalSinceDate: schedule];

NSLog(@"distanceBetweenDates: %lu", (unsigned long)distanceBetweenDates );

結果:

 schedule: 16436914033316069376
 now: 6174145184
 distanceBetweenDates: 0

しかし、結果として得られる 2 つの数値は正しくないため、結果は正しくありません。誰かが私が間違っていることを教えてもらえますか? ありがとう

更新: 以下の回答のおかげで、コードを次のように更新しました。

NSString *dateString = [currentObjectArray valueForKey:@"ScheduleTime" ];
        NSDate *schedule = [dateFormatter dateFromString:dateString];

        float s = [schedule timeIntervalSince1970];
        NSLog(@" %f", s );

        NSTimeInterval timeInterval = [currentObjectArray timeIntervalSinceNow];
        if (timeInterval > 0) {
            NSLog(@"YES");
        } else {
            NSLog(@"NO");

The schedule date format is: "YYYY-MM-DD'T'HH:mm:ss"

Update2: ローカル タイム ゾーンを追加するのを忘れていました。すべての助けをありがとう。

4

2 に答える 2

1

これらの 2 つの行は、あなたが思っていることをしません。

NSLog(@"schedule: %lu", (unsigned long) schedule );
NSLog(@"now: %lu", (unsigned long)[NSDate date] );

この型キャストを実行すると、オブジェクトへのポインタunsigned longの表現を返すようにシステムに要求されます。これはメモリ アドレスであり、時間とはまったく関係ありません。実際に値を要求したかった可能性があります。NSTimeInterval

NSLog(@"schedule: %f", [schedule timeIntervalSince1970] );
NSLog(@"now: %f", [[NSDate date] timeIntervalSince1970] );

あなたの混乱をさらに悪化させるのは、次の行も誤解していることです。

NSTimeInterval distanceBetweenDates = [schedule timeIntervalSinceDate: schedule];

scheduleからschedule;までの秒数をシステムに教えてもらいます。0それらは同一であるため、明らかに常にそうなります。代わりに、おそらく次のいずれかを意味していました。

NSTimeInterval distanceBetweenDates1 = [[NSDate date] timeIntervalSinceDate:schedule];
NSTimeInterval distanceBetweenDates2 = [schedule timeIntervalSinceDate:[NSDate date]];
于 2015-02-11T20:26:49.550 に答える