Karena ini rupanya jawaban saya yang paling populer, saya akan mencoba mengeditnya agar mengandung sedikit lebih banyak informasi.
Terlepas dari namanya, NSDatedalam dan dari dirinya sendiri hanya menandai suatu titik dalam waktu mesin, bukan tanggal. Tidak ada korelasi antara titik waktu yang ditentukan oleh satu NSDatedan 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 NSDateharus 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 NSDateComponentsobjek 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 NSCalendarReferensi Kelas . Informasi lebih lanjut tentang NSDateComponentsini dapat ditemukan di NSDateComponentsReferensi Kelas .
Untuk referensi, mengakses komponen individu dari NSDateComponentsagak mudah:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Anda hanya harus berhati-hati: NSDateComponentstidak akan berisi informasi yang valid untuk bidang apa pun yang Anda minta kecuali Anda membuat mereka dengan informasi yang valid (yaitu permintaan NSCalendaruntuk memberikan informasi itu denganNSCalendarUnit s). NSDateComponentstidak 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 NSCalendardengan NSCalendarUnitErabendera.