NSString到NSDate

Min*_*nar 38 cocoa nsdate nsstring nsdateformatter

我有一个包含当前日期的字符串,使用它:

NSString *date = [[NSDate date] description];
Run Code Online (Sandbox Code Playgroud)

在不同的点,我想从这个字符串中检索日期,我使用以下代码:

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault];
[dateFormatter setDateFormat:@"YYYY-MM-DD HH:MM:SS ±HHMM"];

NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:<NSString containing date>];
Run Code Online (Sandbox Code Playgroud)

我正在dateFromStringnil为0x0.我究竟做错了什么?

Nic*_*ley 64

你不能发明格式字符串语法并期望它工作; 你需要实际使用文档格式.(说真的,"MM"同时表示"月","分钟"和"GMT偏移分钟"?)

正如文档所指出的那样,10.4格式化程序使用Unicode格式字符串.

尝试"yyyy-MM-dd HH:mm:ss ZZZ".

另外,Objective-C源是ASCII.不要把像这样的字符放在那里,并希望它能在任何环境中工作; 相反,使用字符串文件.


gri*_*lix 7

此外,dateFromString:返回一个自动释放的NSDate,因此:

NSDate *dateFromString = [[NSDate alloc] init]; // <- non freed instance
dateFromString = [dateFormatter dateFromString:<NSString containing date>]; // <- new autoreleased instance
....
[dateFromString release]; // <- wrong
Run Code Online (Sandbox Code Playgroud)

您可能想要:

//NSDate *dateFromString = [[NSDate alloc] init];
NSDate *dateFromString = [dateFormatter dateFromString:<NSString containing date>];
....
//[dateFromString release]; // dateFromString is autoreleased
Run Code Online (Sandbox Code Playgroud)

希望这可以救人:)