我无法从NSDate获取字符串

时间:2012-08-13 07:43:02

标签: objective-c nsdate

我有一个[self.post post_time] NSDate,其值为2012-08-02T08:57:52.152713 + 00:00

NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
[formatter setDateFormat:@"yyyy-mm-dd"];
NSLog([formatter stringFromDate:[self.post post_time]]);

它不起作用。有什么问题?

2 个答案:

答案 0 :(得分:1)

您的代码适合我

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss.SSSz"];
NSDate *myDate = [df dateFromString: @"2012-08-02T08:57:52.152713+00:00"]; // simulate your attribute

NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
[formatter setDateFormat:@"yyyy-MM-dd"];
NSLog(@"%@", [formatter stringFromDate:myDate]);

答案 1 :(得分:0)

首先,时区让您感到头疼,因为NSDateFormatter可以识别时区的以下格式,即+0000GMT+1000,但无法识别带冒号的时区+00:00,简单地说,它没有模式。所以,不知怎的,你应该从时区部分删除冒号。

,您必须使用以下模式作为输入日期而不是yyyy-mm-dd,因为此模式不会覆盖您的输入字符串。

NSString *_dateString = @"2012-08-02T08:57:52.152713+00:00";
NSString *_noColonInTimezone = [_dateString stringByReplacingCharactersInRange:NSMakeRange(_dateString.length-3, 1) withString:@""];
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSZZZ"];
NSDate *_date = [_dateFormatter dateFromString:_noColonInTimezone];
NSLog(@"raw date : %@", _date);

它运行良好,已在真实设备上测试,我希望它可以帮助您获取具有正确日期的NSDate对象,然后您可以格式化日期你想要的输出。