在没有其他信息的情况下,如何获取 NSDate
对象的年/月/日?我意识到我可以用类似的东西来做到这一点:
NSCalendar *cal = [[NSCalendar alloc] init];
NSDateComponents *components = [cal components:0 fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];
但是对于像获取 NSDate
的年/月/日这样简单的事情来说,这似乎很麻烦。还有其他解决办法吗?
最佳答案
因为这显然是我最受欢迎的答案,所以我会尝试对其进行编辑以包含更多信息。
尽管有它的名字,NSDate
本身只是标记机器时间中的一个点,而不是日期。 NSDate
指定的时间点与年、月或日之间没有关联。为此,您必须引用日历。任何给定的时间点都会根据您正在查看的日历返回不同的日期信息(例如,公历和犹太历中的日期并不相同),而公历是世界上使用最广泛的日历世界 - 我假设 - 我们有点偏向于 NSDate
应该总是使用它。幸运的是,NSDate
更加跨党派。
如您所述,获取日期和时间必须通过 NSCalendar
,但有一种更简单的方法:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
这会生成一个 NSDateComponents
对象,其中包含当前系统日历中当天的日、月和年。 (注意:这不一定是当前用户指定的日历,只是默认的系统日历。)
当然,如果您使用不同的日历或日期,您可以轻松更改它。可以在 NSCalendar
Class Reference 中找到可用日历和日历单位的列表。 .关于 NSDateComponents
的更多信息可以在 NSDateComponents
Class Reference 中找到。 .
作为引用,从 NSDateComponents
访问单个组件相当简单:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
您只需要注意:NSDateComponents
不会包含您要求的任何字段的有效信息,除非您使用该有效信息生成它们(即请求 NSCalendar
到使用 NSCalendarUnit
提供该信息)。 NSDateComponents
本身不包含引用信息——它们只是简单的结构,包含供您访问的数字。例如,如果您还想从 NSDateComponents
中获得一个时代,则必须将 NSCalendar
的生成器方法提供给 NSCalendarUnitEra
旗帜。
https://stackoverflow.com/questions/3694867/