3
NSDate *date = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"MM/dd/yyyy"];
NSLog([@"today is " stringByAppendingString:[dateFormat stringFromDate:date]]);
NSLog([@"firstBirthdayDate is " stringByAppendingString:[dateFormat stringFromDate:firstBirthdayDate]]);
NSLog([@"secondBirthdayDate is " stringByAppendingString:[dateFormat stringFromDate:secondBirthdayDate]]);
if ([firstBirthdayDate isEqualToDate:secondBirthdayDate])
    NSLog(@"First date is the same as second date");
if (firstBirthdayDate < date)
    NSLog(@"First date is earlier than today");
else
    NSLog(@"First date is later than today");

if (secondBirthdayDate < date)
    NSLog(@"Second date is earlier than today");
  • 今日は 2012 年 11 月 8 日です
  • firstBirthdayDateは 2012 年 1 月 23 日です
  • secondBirthdayDateは 2012 年 1 月 23 日です

ログに記録される内容は次のとおりです。

最初の日付は2番目の日付と同じです

初デートは今日より遅い

2 番目の日付は今日より前です

気が狂いそうです…

4

4 に答える 4

7

if ([date1 isEqualToDate:date2])2つの日付を比較するために使用するか、次を使用できます。

if ([date1 compare:date2] == NSOrderedSame)

if ([date1 compare:date2] == NSOrderedAscending)

if ([date1 compare:date2] == NSOrderedDescending)

><または=非ポインタを比較するためだけのものです。基本的に私の理解では、これらの演算子を使用している場合、その中の値ではなくメモリアドレスを比較している可能性があります。したがって、予期しない結果が得られます。

論理的には、これがどのように機能するかです。

    if (obj1 > obj2) {
        return NSOrderedDescending;
    }

    if (obj1 < obj2) {
        return NSOrderedAscending;
    }

    if (obj1 == obj2) {
        return NSOrderedSame;
    }

日付を比較するために、任意の比較ステートメントを使用できます。

于 2012-11-09T04:12:14.330 に答える
0

<または>を使用して日付を比較することはできません。正しい方法を使用する必要があります。この投稿を見てください。

于 2012-11-09T04:14:45.837 に答える
0
    if ([date compare:firstBirthdayDate] == NSOrderedAscending){
         NSLog(@"First date is earlier than today");
    }
   else{
        NSLog(@"First date is later than today");
   }
   if ([date compare:secondBirthdayDate] == NSOrderedAscending){
         NSLog(@"Second date is earlier than today");
   }

   if ([firstBirthdayDate compare: secondBirthdayDate] == NSOrderedSame) 
        NSLog(@"First date is the same as second date");
于 2012-11-09T04:23:00.700 に答える
0

つまり、基本的な演算子は OBJECT < > != == ... のプリミティブ型でのみ機能するため、この変数の POINTER 値で基本的な操作を行います

C ++では、これらの演算子はobjCとjavaおよびNSObjectのisEqual関数を使用する必要がある他の言語で上書きできます

于 2012-11-09T09:00:52.403 に答える