Saya mencoba mencapai sinkronisasi dropBox dan perlu membandingkan tanggal dari dua file. Satu ada di akun dropBox saya dan satu lagi di iPhone saya.
Saya datang dengan yang berikut ini, tetapi saya mendapatkan hasil yang tidak terduga. Saya kira saya melakukan sesuatu yang secara fundamental salah ketika membandingkan kedua tanggal. Saya hanya menggunakan> <operator, tetapi saya kira ini tidak baik karena saya membandingkan dua string NSDate. Kita mulai:
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.");
}
Ini memberi saya output (acak & salah) berikut:
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.
atau yang ini ternyata benar:
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.
iphone
objective-c
cocoa-touch
nsdate
lupakan
sumber
sumber
Jawaban:
Mari kita asumsikan dua tanggal:
Kemudian perbandingan berikut akan memberi tahu mana yang lebih dulu / lebih baru / sama:
Silakan merujuk ke dokumentasi kelas NSDate untuk lebih jelasnya.
sumber
date1 -> date2
naik / turun (dan oleh karena itu date1 lebih lambat atau lebih awal masing-masing).Terlambat ke pesta, tetapi cara mudah lain untuk membandingkan objek NSDate adalah dengan mengubahnya menjadi tipe primitif yang memungkinkan penggunaan mudah '>' '<' '==' dll.
misalnya.
timeIntervalSinceReferenceDate
mengubah tanggal menjadi detik sejak tanggal referensi (1 Januari 2001, GMT). SebagaitimeIntervalSinceReferenceDate
mengembalikan NSTimeInterval (yang merupakan typedef ganda), kita dapat menggunakan komparator primitif.sumber
(NSComparisonResult)compare:(NSDate *)
tetapi masih cukup bertele-tele untuk operasi sederhana ini ... (seperti biasa)[dateA timeIntervalSinceDate:dateB] > 0
Di Swift, Anda dapat membebani operator yang ada:
Kemudian, Anda dapat membandingkan NSDates langsung dengan
<
,>
, dan==
(sudah didukung).sumber
{ ... }
NSDate
memiliki fungsi bandingkan.compare:
Mengembalikan sebuahNSComparisonResult
nilai yang menunjukkan pemesanan sementara penerima dan tanggal lain yang diberikan.Parameter :
anotherDate
Tanggal untuk membandingkan penerima. Nilai ini tidak boleh nol. Jika nilainya nol, perilaku tidak terdefinisi dan dapat berubah di versi Mac OS X mendatang.Nilai Pengembalian:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
,.sumber
Anda ingin menggunakan NSDate bandingkan :, laterDate :, beforeDate :, atau isEqualToDate: metode. Menggunakan operator <dan> dalam situasi ini membandingkan pointer, bukan tanggal
sumber
Ini mengembalikan yang lebih awal dari penerima dan Tanggal lain. Jika keduanya sama, penerima dikembalikan.
sumber
cDate = [aDate earlierDate:bDate]
kemudiancDate == aDate
dancDate == bDate
keduanya bisa benar. Menemukan ini melakukan beberapa pekerjaan tanggal di iOS 8.-earlierDate:
(dan-laterDate:
) tidak dapat mengembalikan penerima maupun argumen.Beberapa utilitas tanggal, termasuk perbandingan dalam BAHASA INGGRIS, yang bagus:
Pelaksanaan:
sumber
Kamu harus menggunakan :
untuk membandingkan tanggal. Tidak ada operator kelebihan muatan di tujuan C.
sumber
Mengapa kalian tidak menggunakan
NSDate
metode perbandingan ini :sumber
Saya telah menghadapi situasi yang hampir sama, tetapi dalam kasus saya, saya memeriksa apakah jumlah hari berbeda
Berguna saat Anda perlu membandingkan NSDate dalam satuan Hari / Bulan / Tahun
sumber
Anda dapat membandingkan dua tanggal dengan metode ini juga
sumber
Saya sudah mencobanya semoga berhasil untuk Anda
sumber
Gunakan fungsi sederhana ini untuk perbandingan tanggal
sumber