另一个NSDateFormatter问题

时间:2013-01-06 00:45:59

标签: ios6 nsdate nsdateformatter

完成了文档后,似乎以下情况应该有效,但结果总是为零。 (这适用于iOS sdk 6)

NSString *releaseDate = @"2012-10-22T00:00:00-07:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *date = nil;

[dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss-ZZZZZ"];
date = [dateFormatter dateFromString:releaseDate];

NSLog(@"Result date: %@", date); // Logs "(null)"

任何见解?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你怎么试试这个。如果您的日期字符串不是我猜测的本地化,即使Apple建议你可以使用这样的东西:

struct tm tmDate;
const char *formatString = "%Y-%m-%dT%H:%M:%S%z";

strptime_l(releaseDate, formatString, & tmDate, NULL);
date = [NSDate dateWithTimeIntervalSince1970: mktime(& tmDate)];

NSLog(@"Result date: %@", date);

您的发布日期必须是C字符串,例如const char *releaseDate = "2012-10-22T00:00:00-07:00";,您也可以使用UTF8String的{​​{1}}方法获取。{/ p>

答案 1 :(得分:1)

确定。对文档的一些重新阅读揭示了我的误解:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *releaseDate = @"2012-10-22T00:00:00-07:00";
NSDate *date = nil;

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
date = [dateFormatter dateFromString:releaseDate];

NSLog(@"Result date: %@", date);
NSLog(@"Result string: %@", [dateFormatter stringFromDate:date]);

“T”必须用撇号括起来,时区的“ZZZZZ”已经占据了“ - ”所以必须将其删除。

现在它按预期工作。