我有以下代码:
- (NSString *)
lastSeenDateString:(NSString *)dateString
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ssZ"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSString *result = [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle];
return result;
}dateString变量如下所示(我输出到日志以确保):2014-0520T17:23:42.000Z
当输出到日志时,date变量显示:(null)
我尝试删除setTimeZone方法,将setDateFormat更改为许多不同的东西(“yyyy”-“MM”-‘dd’HH‘:’MM‘’s‘z’,“yyyy:MM:ss”,“yyyy”等等)。但什么都不管用。无论我做什么,它都返回null。我看过许多其他StackOverflow问题,回答了同样的问题,以及谷歌上的其他示例,我的代码似乎与公认的答案一致。然而,仍然只有一个空的NSDate变量结果。
发布于 2014-05-20 17:46:56
输入与格式不匹配。
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSSZ" ];发布于 2014-05-20 18:29:38
您需要将T放在单引号中,并且应该在格式字符串中包含毫秒SSS。
您的日期字符串似乎是RFC 3339日期。如技术问答1480中所述,要确保处理不同的国际日历设置,需要在en_US_POSIX区域设置中解析该设置。
因此:
- (NSString *)lastSeenDateString:(NSString *)dateString
{
NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
// parse RFC 3339 date
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = enUSPOSIXLocale;
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
NSDate *date = [dateFormatter dateFromString:dateString];
// switch back to current locale
dateFormatter.locale = [NSLocale currentLocale];
return [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle];
}https://stackoverflow.com/questions/23766415
复制相似问题