因为这显然是我最受欢迎的答案,所以我将尝试对其进行编辑以包含更多信息。
尽管它的名字,NSDate
它本身只是标记机器时间的一个点,而不是一个日期。NSDate
an 指定的时间点与年、月或日之间没有相关性。为此,您必须参考日历。任何给定的时间点都会根据您正在查看的日历返回不同的日期信息(例如,公历和犹太历中的日期并不相同),而公历是世界上使用最广泛的日历世界 - 我假设 - 我们有点偏见,NSDate
应该总是使用它。NSDate
,幸运的是,更加两党合作。
正如您所提到的,必须通过获取日期和时间NSCalendar
,但有一种更简单的方法:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
NSDateComponents
这会从当前系统日历中生成一个包含当天的日、月和年的对象。(注意:这不一定是当前用户指定的日历,只是默认的系统日历。)
当然,如果您使用不同的日历或日期,您可以轻松更改它。可以在NSCalendar
类参考中找到可用日历和日历单位的列表。更多信息NSDateComponents
可以在NSDateComponents
类参考中找到。
作为参考,从中访问单个组件NSDateComponents
相当容易:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
您只需要注意:NSDateComponents
不会包含您要求的任何字段的有效信息,除非您使用该有效信息生成它们(即请求NSCalendar
使用 s 提供该信息NSCalendarUnit
)。NSDateComponents
本身不包含参考信息 - 它们只是简单的结构,包含供您访问的数字。如果您还想获得一个时代,例如, out of NSDateComponents
,您必须NSCalendar
使用NSCalendarUnitEra
标志提供生成器方法。