日期格式为2008-02-01T10:03:23.793-06:00

问题描述:

在我的项目中,我得到了“2008-02-01T10:03:23.793-06:00”这个日期格式在字符串中我必须转换成我正在使用的NSDate日期格式为2008-02-01T10:03:23.793-06:00

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 

NSDate* dateFromString = [dateFormatter dateFromString:@"2008-02-01T10:03:23.793-06:00"]; 

但是,当我打印日期值使用NSLog我得到的值为空。

请帮我

谢谢

+0

什么语言和平台您使用? – 2010-09-01 05:33:52

+0

该语言是Objective-C,我想用户正在使用Apple自己的Xcode。 – 2010-09-11 08:32:54

NSDateFormatter将无法解析它,因为时区不RFC 822 or GMT standard一致。问题出现在最后一个“:”,让你需要“GMT”。

您尊重RFC 3339的日期。

您将需要使用NSFormatter来解析它。您应该使用getObjectValue:forString:errorDescription:

设置字符串@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

我想你也需要为格式化程序设置一个语言环境。看一下here

谷歌的GData Objective-C客户端有一个可以解析RFC 3339日期的类(GDataDateTime)。

http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/Elements/GDataDateTime.m

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
[formatter setLenient:YES]; 
NSString* buggeredTime = [[sourceDate substringToIndex:26] stringByAppendingString:[sourceDate substringFromIndex:27]]; 
NSDate* dueDate = [formatter dateFromString:buggeredTime]; 
[formatter setDateFormat:@"'Time Due: 'hh:mm a MM/dd/yy"]; 
NSString* dateString = [formatter stringFromDate:dueDate]; 
[formatter release]; 

(如果需要的setLenient说不上副手。)

+1

请注意,在更高版本中已经消除了对子串事物的需求。您现在可以指定“ZZZZZ”接受格式为“-06:00”的时区。 – 2014-05-27 19:22:14

只需使用代替(注意不是 “Z”, “ZZZ”):

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
+0

这对我而言非常合适,例如:2015-02-15T17:21:54.000-06:00 – 2015-02-21 04:50:03