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
类参考中找到。 有关NSDateComponents
更多信息可以在NSDateComponents
类参考中找到。
作为参考,从NSDateComponents
访问单个组件非常简单:
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];
你只需要注意: NSDateComponents
不会包含你要求的任何字段的有效信息,除非你使用该有效信息生成它们(即请求NSCalendar
提供NSCalendarUnit
的信息)。 NSDateComponents
本身不包含任何参考信息 - 它们只是简单的结构,可以存储数字供您访问。 如果你还想获得一个时代,例如,在NSDateComponents
,你必须用NSCalendarUnitEra
标志从NSCalendar
提供生成器方法。
你可以使用NSDateFormatter获得单独的NSDate组件:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd"];
myDayString = [df stringFromDate:[NSDate date]];
[df setDateFormat:@"MMM"];
myMonthString = [df stringFromDate:[NSDate date]];
[df setDateFormat:@"yy"];
myYearString = [df stringFromDate:[NSDate date]];
如果你想获得月份的数字而不是缩写,使用“MM”。 如果你想获得整数,使用[myDayString intValue];
只需要重新说明Itai的优秀(和工作!)代码,以下是样本帮助类的样子,以返回给定NSDate变量的年份值。
正如您所看到的,修改此代码以获取月份或日期非常简单。
+(int)getYear:(NSDate*)date
{
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];
return year;
}
(我不敢相信我们在2013年必须编写我们自己的基本iOS日期函数......)
另一件事:永远不要使用<和>来比较两个NSDate值。
XCode会高兴地接受这样的代码(没有任何错误或警告),但其结果是彩票。 您必须使用“比较”函数来比较NSDates:
if ([date1 compare:date2] == NSOrderedDescending) {
// date1 is greater than date2
}
链接地址: http://www.djcxy.com/p/85171.html