转换目标C中的日期格式

far*_*new 30 iphone objective-c nsdate nsdateformatter ios

如何将以下日期"Sun Jul 17 07:48:34 +0000 2011"转换为以下格式"2011-07-17 07:48:34"?

我使用NSDateFormatter如下所示,但它没有工作.结果是null.

NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];
Run Code Online (Sandbox Code Playgroud)

Suh*_*tel 68

您传入的日期样式的日期格式错误.这是一个解释不同修饰符的文档:日期格式模式

要解析日期"Sun Jul 17 07:48:34 +0000 2011",你需要一个像这样的格式:

[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
Run Code Online (Sandbox Code Playgroud)

为了得到以下格式:"2011-07-17 07:48:34",这里是完整的代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date  = [dateFormatter dateFromString:sDate];

// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date]; 
Run Code Online (Sandbox Code Playgroud)


ste*_*ete 2

如果 sDate 是格式为“Sun Jul 17 07:48:34 +0000 2011”的字符串,则必须将其转换为 NSDate。然后,您可以使用第二个 NSDateFormatter 将此日期转换为您所需的格式“yyyy-MM-dd HH:mm:ss”。

如果您需要找出需要转换的字符串,该网站有一个很好的参考: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

例如“Sun Jul 17 07:48:34 +0000 2011”可以解析为

[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];
Run Code Online (Sandbox Code Playgroud)

作为一点建议,像“Jul”(应该是七月)这样的非标准日期可能会在这里产生问题。使用 strftime() 将所需部分转换为纯 C 语言会更快。请参阅参考资料:http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp ?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm

然后,您可以将 unix 时间戳转换回 NSDate 中:

[NSDate dateWithTimeIntervalSince1970:]
Run Code Online (Sandbox Code Playgroud)

使用 C 进行日期/时间解析通常速度快 10 倍。NSDateFormatter 是一只慢狗。