完成了文档后,似乎以下情况应该有效,但结果总是为零。 (这适用于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)"
任何见解?
提前感谢您的帮助。
答案 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”已经占据了“ - ”所以必须将其删除。
现在它按预期工作。