【发布时间】:2012-12-21 22:06:56
【问题描述】:
我正在尝试使用以下代码转换时间字符串
NSString *origDate = @"2012-12-06T09:27:18+08:00";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setFormatterBehavior:NSDateFormatterBehavior10_4];
[df setDateFormat:@"yyyy-mm-dd HH:mm:ss VVVV"];
NSDate *convertedDate = [df dateFromString:origDate];
但是,当我打印 convertDate 时,它返回 null。我的猜测是你使用的日期格式不匹配。如何修改代码以使其正常工作?我可以使用什么格式来匹配我的字符串?
编辑(参考苹果文档后)
我查看了苹果页面上的日期格式文档,发现如下代码
NSDateFormatter *rfc3339DateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[rfc3339DateFormatter setLocale:enUSPOSIXLocale];
[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// Convert the RFC 3339 date time string to an NSDate.
NSDate *date = [rfc3339DateFormatter dateFromString:rfc3339DateTimeString];
上面的格式似乎与我在原始日期字符串“2012-12-06T09:27:18+08:00”中的格式相匹配。但是我仍然得到一个空值。我越来越近了吗?我还能如何更新这个?
【问题讨论】:
-
你的猜测是正确的。源日期字符串看起来很糟糕;你对此有任何控制权吗?似乎日期和时间以及时区之间应该有一个空格。但除此之外,是的,您必须更改为日期格式化程序指定的字符串。
-
@trudyscousin 它是由我的系统创建的,但我确信我可以操纵原始字符串。但是你是说没有'setDateFormat'可以用来转换我当前的字符串?
-
不,一点也不。 Apple 文档中的This page 将引导您找到正确设置字符串所需的文档。查看“固定格式”部分。
-
@trudyscousin 我按照你的建议检查了文档,发现了一些似乎检查类似格式的东西,但它仍然返回一个空值。你介意帮我再看看我原来的帖子吗?
-
在 iOS 5 中,您无法在时区偏移中读取带有“:”的时间戳——您必须以某种方式删除该字符。在 iOS 6 中可以,但只能使用“ZZZZZ”。
标签: objective-c date nsstring converter nsdateformatter