Karena ini rupanya jawaban saya yang paling populer, saya akan mencoba mengeditnya agar mengandung sedikit lebih banyak informasi.
Terlepas dari namanya, NSDate
dalam dan dari dirinya sendiri hanya menandai suatu titik dalam waktu mesin, bukan tanggal. Tidak ada korelasi antara titik waktu yang ditentukan oleh satu NSDate
dan satu tahun, bulan, atau hari. Untuk itu, Anda harus merujuk ke kalender. Setiap titik waktu akan mengembalikan informasi tanggal yang berbeda berdasarkan pada kalender apa yang Anda lihat (tanggal tidak sama dalam kalender Gregorian dan Yahudi, misalnya), dan sementara kalender Gregorian adalah kalender yang paling banyak digunakan di dunia - saya berasumsi - kita sedikit bias yang NSDate
harus selalu menggunakannya. NSDate
, untungnya, jauh lebih bipartisan.
Mendapatkan tanggal dan waktu harus melalui NSCalendar
, seperti yang Anda sebutkan, tetapi ada cara yang lebih sederhana untuk melakukannya:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Itu menghasilkan NSDateComponents
objek yang berisi hari, bulan, dan tahun dari kalender sistem saat ini untuk hari ini. ( Catatan: ini belum tentu kalender yang ditentukan pengguna saat ini , hanya kalender sistem default.)
Tentu saja, jika Anda menggunakan kalender atau tanggal yang berbeda, Anda dapat dengan mudah mengubahnya. Daftar unit kalender dan kalender yang tersedia dapat ditemukan di NSCalendar
Referensi Kelas . Informasi lebih lanjut tentang NSDateComponents
ini dapat ditemukan di NSDateComponents
Referensi Kelas .
Untuk referensi, mengakses komponen individu dari NSDateComponents
agak mudah:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Anda hanya harus berhati-hati: NSDateComponents
tidak akan berisi informasi yang valid untuk bidang apa pun yang Anda minta kecuali Anda membuat mereka dengan informasi yang valid (yaitu permintaan NSCalendar
untuk memberikan informasi itu denganNSCalendarUnit
s). NSDateComponents
tidak mengandung informasi referensi di dalam dan tentang diri mereka sendiri - mereka hanya struktur sederhana yang menyimpan angka untuk Anda akses. Jika Anda ingin mendapatkan era, misalnya, dari NSDateComponents
, Anda harus memberi makan metode generator dari NSCalendar
dengan NSCalendarUnitEra
bendera.