猿问

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


慕的地6264312
浏览 616回答 3
3回答

米琪卡哇伊

因为这显然是我最受欢迎的答案,所以我会尝试编辑它以包含更多信息。尽管它的名字,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你将不得不NSCalendar用NSCalendarUnitEra旗帜来提供生成器方法。
随时随地看视频慕课网APP
我要回答