Ada dua cara menyimpan NSDate di NSUserDefaults yang saya temui.
Opsi 1 - setObject: forKey:
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Opsi 2 - timeIntervalSince1970
// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];
// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
Pro dan kontra
Pilihan 1
Ini tampaknya kompak dan logis. Namun, saya punya kekhawatiran tentang kesalahan ini karena bug Date Formatter .
pilihan 2
Ini tampaknya canggung. Saya juga tidak yakin keakuratannya - dalam satu tes yang saya lakukan, ketika saya mengambil kembali tanggal itu keluar oleh 48 detik, meskipun Apple Docs mengatakan bahwa NSTimeInterval memiliki "akurasi subsecond".
Persyaratan
Metode apa pun yang saya pilih, itu harus:
Tepat dalam satu detik.
Dapat dibaca dan dapat diandalkan.
Pertanyaan saya
Apakah ketidaktepatan dengan Opsi 2 karena saya melakukan sesuatu yang salah?
Manakah dari dua opsi ini yang akan Anda gunakan?
Apakah ada opsi lain yang tidak saya sadari?
Terima kasih!
sumber
Untuk opsi # 1, saya tidak percaya formatter tanggal terlibat. Mungkin di bawah tenda, tapi saya membayangkan itu tidak rusak. Tanggal disimpan dalam bentuk ISO 8601 .
Untuk opsi # 2, gunakan
-setDouble:forKey:
dan-doubleForKey
bukanfloat
versi berbasis. Itu mungkin menjadi penyebab kesalahan presisi Anda.sumber
Gunakan NSUserDefaults; tanggal disimpan dalam waktu Zulu, jadi tidak ada masalah zona waktu yang perlu dikhawatirkan. Simpan di zona waktu Anda, tarik keluar di zona waktu lain, Anda akan baik-baik saja, sistem menangani konversi (tidak ada formatter tanggal khawatir).
sumber
Jika Anda menyimpan tanggal kedaluwarsa dari Facebook Graph API, saya akan menggunakan * Opsi 2 * .
Opsi dua dapat dengan mudah dikonversi ke string (menggunakan stringWithFormat). Yang paling penting, ini berfungsi untuk API Grafik.
Plus, Anda tidak perlu khawatir tentang format tanggal Anda. Tidak berurusan dengan NSDateFormatter sepadan dengan kemungkinan kesalahan 48 detik.
sumber