繁体   English   中英

在目标 C 中转换日期格式

[英]Converting a date format in objective C

如何将以下日期“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];

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

要解析日期“Sun Jul 17 07:48:34 +0000 2011”,您需要这样的格式:

[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

要将其转换为以下格式:“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]; 

如果 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"];

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

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

[NSDate dateWithTimeIntervalSince1970:]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM