根据用户设置将JSON日期解析为NSDate
我在转换brut JSON字符串日期时遇到问题: “创建于”=“2012-12-22T21:39:22Z” 进入一个约会 以下是我目前的分类:根据用户设置将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
- (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日期格式。参考: