objective-c - NSDate 获取年/月/日

在没有其他信息的情况下,如何获取 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/

相关文章:

ios - Objective-C 中的 "@private"是什么意思?

objective-c - 语义问题 : Property's synthesized getter

ios - UIScrollView 以编程方式滚动到底部

objective-c - block 声明语法列表

ios - UITableview:如何禁用某些行而不是其他行的选择

objective-c - 将项目转换为使用 ARC 时, "switch case is in p

iphone - 我们如何以编程方式检测设备在哪个 iOS 版本上运行?

ios - 在 Swift 中实例化并展示一个 viewController

ios - 清除 NSUserDefaults

objective-c - 如何将堆栈跟踪打印到控制台/登录 Cocoa?