根据用户设置将JSON日期解析为NSDate

根据用户设置将JSON日期解析为NSDate,json,nsdate,nsdateformatter,Json,Nsdate,Nsdateformatter,我在转换brut JSON字符串日期时遇到问题: “创建于”=“2012-12-22T21:39:22Z” 进入一个约会 以下是我目前的分类: - (NSDate*)dateWithJSONString { [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [date

我在转换brut JSON字符串日期时遇到问题:

“创建于”=“2012-12-22T21:39:22Z”

进入一个约会

以下是我目前的分类:

- (NSDate*)dateWithJSONString
{
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
NSDate *date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:self];
return date;        
}
问题是,这适用于95%的情况,但是如果一些用户使用AM/PM,而不是24小时的日期和时间设置,并结合自定义的国际设置,则不会从json字符串创建日期

我读过这篇文章,但我找不到与所有国际用户和设置一起工作的好方法

我添加了以下示例:

[dateFormatter setLocale:[NSLocale currentLocale]];
但这并没有改变什么。如果我将iPhone设置为AM/PM而不是24小时,则不会创建NSDate

AM/PM NSDate模式: 2013-01-21 07:12:43上午+0000

24小时NSDate模式: 2013-01-21 07:12:43+0000


我错过了什么?日期格式有什么需要更新的吗?

请使用下面的代码,这对我来说非常合适

 NSString* strDate = [jsonObj objectForKey:@"created_at"];
 NSDate *date = [self dateWithJSONString:strDate];


请使用下面的代码,这对我来说非常适合

 NSString* strDate = [jsonObj objectForKey:@"created_at"];
 NSDate *date = [self dateWithJSONString:strDate];


您只需设置正确的日期格式,其余代码都是正确的

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];
日期字符串中的字符
Z
是ISO8601定义的有效日期格式,它表示日期字符串位于UTC时区。因此,不需要将时区设置为格式化程序。格式化程序可以从字符
Z
识别时区。所以,如果忽略它,除非为dateFormatter指定了时区,否则时区中会存在不匹配

如果您的dateString不统一,请对dateFormat进行回退检查。检查转换日期是否为零,如果为零,请使用回退日期格式


此外,除非日期字符串和系统日历的日历类型发生更改,否则无需将日历设置为dateFormatter

您只需要设置正确的日期格式,其余代码都是正确的

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];
日期字符串中的字符
Z
是ISO8601定义的有效日期格式,它表示日期字符串位于UTC时区。因此,不需要将时区设置为格式化程序。格式化程序可以从字符
Z
识别时区。所以,如果忽略它,除非为dateFormatter指定了时区,否则时区中会存在不匹配

如果您的dateString不统一,请对dateFormat进行回退检查。检查转换日期是否为零,如果为零,请使用回退日期格式


此外,除非日期字符串和系统日历的日历类型发生更改,否则无需将日历设置为dateFormatter

我试图做同样的事情,但在我的例子中,JSON日期也包括毫秒,日期来源于MongoDB

以下是有毫秒时的格式化代码段(例如
2014-02-27T09:30:00.000Z


我试图做同样的事情,但在我的例子中,JSON日期也包括毫秒,日期来源于MongoDB

以下是有毫秒时的格式化代码段(例如
2014-02-27T09:30:00.000Z


我添加了以下内容:[jsonDateFormatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX”];现在一切都好了。这个技术说明就是为了这个:我添加了这个:[jsonDateFormatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX”];现在一切都好了。这个技术说明就是为了这个:这是javascript json日期格式。请参阅:这是javascript json日期格式。参考: