因为这显然是我最受欢迎的答案,所以我将尝试对其进行编辑以包含更多信息。
尽管名称如此,但它NSDate
本身仅标志着机器时间的一个点,而不是日期。NSDate
和所指定的时间点与年,月或日之间没有关联。为此,您必须参考日历。任何给定的时间点都会根据您要查看的日历返回不同的日期信息(例如,公历和犹太历中的日期都不相同),而公历是日历中使用最广泛的日历世界-我假设-我们有点偏见,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
提供带有NSCalendarUnit
s的信息)。NSDateComponents
本身不包含任何参考信息-它们只是包含数字供您访问的简单结构。例如,如果您还想获得一个时代,例如,NSDateComponents
要从中获得一个,则必须NSCalendar
使用NSCalendarUnitEra
标记来提供generator方法。