1. ホーム
  2. iphone

[解決済み】2つのNSDatesを比較する方法。どちらがより新しいですか?

2022-04-02 09:27:33

質問

ドロップボックスの同期を実現しようとしているのですが、2つのファイルの日付を比較する必要があります。1つは私のdropBoxアカウントにあり、もう1つは私のiPhoneにあります。

以下のように思いついたのですが、予期せぬ結果が出てしまいます。2つの日付を比較するときに、何か根本的に間違ったことをやっているようです。単純に > < 演算子を使いましたが、2つの NSDate 文字列を比較しているので、これではダメなのでしょう。それではどうぞ。

NSLog(@"dB...lastModified: %@", dbObject.lastModifiedDate); 
NSLog(@"iP...lastModified: %@", [self getDateOfLocalFile:@"NoteBook.txt"]);

if ([dbObject lastModifiedDate] < [self getDateOfLocalFile:@"NoteBook.txt"]) {
    NSLog(@"...db is more up-to-date. Download in progress...");
    [self DBdownload:@"NoteBook.txt"];
    NSLog(@"Download complete.");
} else {
    NSLog(@"...iP is more up-to-date. Upload in progress...");
    [self DBupload:@"NoteBook.txt"];
    NSLog(@"Upload complete.");
}

この結果、以下のような(ランダムな&amp;間違った)出力が得られました。

2011-05-11 14:20:54.413 NotePage[6918:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:54.414 NotePage[6918:207] iP...lastModified: 2011-05-11 13:20:48 +0000
2011-05-11 14:20:54.415 NotePage[6918:207] ...db is more up-to-date.

というのがありますが、これはたまたま正しいです。

2011-05-11 14:20:25.097 NotePage[6903:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:25.098 NotePage[6903:207] iP...lastModified: 2011-05-11 13:19:45 +0000
2011-05-11 14:20:25.099 NotePage[6903:207] ...iP is more up-to-date.

解決方法は?

2つの日付を想定してみましょう。

NSDate *date1;
NSDate *date2;

そして、次の比較で、どちらが先か、後か、同じか、が分かります。

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");
} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
} else {
    NSLog(@"dates are the same");
}

を参照してください。 NSDate クラスのドキュメント をご覧ください。