我怎么能得到一个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的年/月/日这样简单的事情来说,这似乎是一大堆麻烦。还有其他解决办法吗?
如果你的目标是iOS 8+,你可以使用新的NSCalendar方便方法以更简洁的格式实现这一点。
首先创建一个NSCalendar并使用所需的NSDate。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
你可以通过component:fromDate单独提取组件:
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
或者,更简洁地,通过getEra使用NSInteger指针:year:month:day:fromDate:
NSInteger year, month, day;
[calendar getEra:nil year:&year month:&month day:&day fromDate:date];
要了解更多信息和示例,请查看iOS 8中简化的NSDate操作。免责声明,这是我写的文章。
下面是Swift的解决方案:
let todayDate = NSDate()
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
// Use a mask to extract the required components. Extract only the required components, since it'll be expensive to compute all available values.
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: todayDate)
var (year, month, date) = (components.year, components.month, components.day)
只是重新描述一下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很乐意接受这样的代码(没有任何错误或警告),但其结果是一个彩票。你必须使用"compare"函数来比较nsdate:
if ([date1 compare:date2] == NSOrderedDescending) {
// date1 is greater than date2
}
如果你的目标是iOS 8+,你可以使用新的NSCalendar方便方法以更简洁的格式实现这一点。
首先创建一个NSCalendar并使用所需的NSDate。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
你可以通过component:fromDate单独提取组件:
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];
或者,更简洁地,通过getEra使用NSInteger指针:year:month:day:fromDate:
NSInteger year, month, day;
[calendar getEra:nil year:&year month:&month day:&day fromDate:date];
要了解更多信息和示例,请查看iOS 8中简化的NSDate操作。免责声明,这是我写的文章。