使用Cocoa/objective-C从整数(年…秒)生成NSDate

使用Cocoa/objective-C从整数(年…秒)生成NSDate,objective-c,cocoa,nsdate,Objective C,Cocoa,Nsdate,我有一年,蒙特,第二个是整数类型,我需要根据它们构建NSDate。 我尝试了这个代码,但得到了(null) 此代码有什么问题?而不是 [tempFormatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"]; 写 使用日期组件创建一个NSDateComponents,然后使用NSCalendar的dateFromComponents:将其转换为日期,这将更加简单。有一个例子说明了如何做到这一点: NSDateComponents *comps = [[NSDat

我有一年,蒙特,第二个是整数类型,我需要根据它们构建NSDate。 我尝试了这个代码,但得到了(null)

此代码有什么问题?

而不是

[tempFormatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"];


使用日期组件创建一个
NSDateComponents
,然后使用NSCalendar的
dateFromComponents:
将其转换为日期,这将更加简单。有一个例子说明了如何做到这一点:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];
[comps setHour:hour];
[comps setMinute:minute];
[comps setSecond:second];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [cal dateFromComponents:comps];
[comps release];

消息中的字符串是什么?它看起来有效吗?把它也贴在这里。“2011-03-14 20:14:40”是用NSLog(@“%@”,message)打印出来的内容;这是一个更好的方法!另一种方法是有效地将整数日期“组件”转换为字符串,并从字符串转换为NSDate!那肯定是自找麻烦。你不能使用
nsgregorianalendar
。。。不幸的是,它被弃用了。完全删除
NSCalendar*cal
的初始化/发布,并在创建
date
时将
cal
更改为
[NSCalendar currentCalendar]
。您不能再指定公历。此外,您还可以通过将行更改为:
[NSDateComponents new]来简化
comps
的创建
@DDPWNAGE:根据,它基本上被重命名为
nscalendardidentifiergregorian
。如果当前日历是其他受支持的日历之一,则使用
[NSCalendar currentCalendar]
将无法正常工作。
[tempFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];
[comps setHour:hour];
[comps setMinute:minute];
[comps setSecond:second];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [cal dateFromComponents:comps];
[comps release];