为了账号安全,请及时绑定邮箱和手机立即绑定

NSDate获得年/月/日

NSDate获得年/月/日

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年/月/日这样简单的事情来说似乎有很多麻烦。还有其他解决方案吗?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

因为这显然是我最受欢迎的答案,所以我会尝试编辑它以包含更多信息。

尽管它的名字,NSDate它本身只是标志着机器时间的一个点,而不是一个日期。由NSDatea 指定的时间点与年,月或日之间没有相关性。为此,您必须参考日历。任何给定的时间点将根据您正在查看的日历返回不同的日期信息(例如,在格里高利历和犹太历的日历中日期不同),而格里高利历是最常用的日历。世界 - 我假设 - 我们有点偏见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使用NSCalendarUnits 提供该信息),否则不会包含您要求的任何字段的有效信息。NSDateComponents它们本身不包含参考信息 - 它们只是简单的结构,可以存储数字供您访问。例如,如果你想得到一个时代,NSDateComponents你将不得不NSCalendarNSCalendarUnitEra旗帜来提供生成器方法。


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 615 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信