Bởi vì đây rõ ràng là câu trả lời phổ biến nhất của tôi, tôi sẽ cố gắng chỉnh sửa nó để chứa thêm một chút thông tin.
Mặc dù tên NSDate
của nó, chỉ đơn giản là đánh dấu một điểm trong thời gian máy, không phải là một ngày. Không có mối tương quan giữa thời điểm được chỉ định bởi NSDate
một năm, tháng hoặc ngày. Đối với điều đó, bạn phải tham khảo một lịch. Bất kỳ thời điểm nào cũng sẽ trả về thông tin ngày khác nhau dựa trên lịch bạn đang xem (ví dụ: ngày không giống nhau trong cả lịch Gregorian và Do Thái), và trong khi lịch Gregorian là lịch được sử dụng rộng rãi nhất trong thế giới - tôi giả sử - chúng ta hơi thiên vị NSDate
nên luôn luôn sử dụng nó. NSDate
, may mắn, là nhiều lưỡng đảng hơn.
Nhận được ngày và thời gian sẽ phải đi qua NSCalendar
, như bạn đã đề cập, nhưng có một cách đơn giản hơn để làm điều đó:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
Điều đó tạo ra một NSDateComponents
đối tượng chứa ngày, tháng và năm từ lịch hệ thống hiện tại cho ngày hiện tại. ( Lưu ý: đây không nhất thiết là lịch do người dùng chỉ định hiện tại , chỉ là lịch mặc định của hệ thống.)
Tất nhiên, nếu bạn đang sử dụng một lịch hoặc ngày khác, bạn có thể dễ dàng thay đổi điều đó. Một danh sách các lịch và đơn vị lịch có sẵn có thể được tìm thấy trong NSCalendar
Tài liệu tham khảo lớp . Thông tin thêm về NSDateComponents
có thể được tìm thấy trong NSDateComponents
Tài liệu tham khảo lớp .
Để tham khảo, truy cập các thành phần riêng lẻ từ NSDateComponents
khá dễ dàng:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
Bạn chỉ cần lưu ý: NSDateComponents
sẽ không chứa thông tin hợp lệ cho bất kỳ trường nào bạn yêu cầu trừ khi bạn tạo chúng với thông tin hợp lệ đó (nghĩa là yêu cầu NSCalendar
cung cấp thông tin đó với NSCalendarUnit
s). NSDateComponents
không chứa thông tin tham khảo trong chính chúng - chúng chỉ là các cấu trúc đơn giản chứa số để bạn truy cập. Nếu bạn cũng muốn để có được một kỷ nguyên, ví dụ, trong NSDateComponents
, bạn sẽ phải nuôi các phương pháp phát từ NSCalendar
với NSCalendarUnitEra
cờ.