3 回答
TA贡献1998条经验 获得超6个赞
因为这显然是我最受欢迎的答案,所以我会尝试编辑它以包含更多信息。
尽管它的名字,NSDate
它本身只是标志着机器时间的一个点,而不是一个日期。由NSDate
a 指定的时间点与年,月或日之间没有相关性。为此,您必须参考日历。任何给定的时间点将根据您正在查看的日历返回不同的日期信息(例如,在格里高利历和犹太历的日历中日期不同),而格里高利历是最常用的日历。世界 - 我假设 - 我们有点偏见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
旗帜来提供生成器方法。
添加回答
举报