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

我有一个问题,转换粗暴的JSON字符串日期:

“created_at”=“2012-12-22T21:39:22Z”;

到NSDate。

这是我目前的类别:

- (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而不是24H,那么日期和时间设置与自定义国际设置相结合,日期不是从json字符串创建的。

我阅读了这个讨论,但是我找不到与我所有的国际用户和设置合作的好方法。

我添加了这个例子:

[dateFormatter setLocale:[NSLocale currentLocale]];

但它没有改变。 如果我使用AM / PM而不是24H设置我的iPhone,则不会创建NSDate。

AM / PM NSDate架构:2013-01-21 07:12:43 AM +0000

24H NSDate架构:2013-01-21 07:12:43 +0000

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


你只需要设置正确的dateFormat,其余的代码是正确的。

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssz"];

dateString中的字符Z是由ISO8601定义的有效日期格式,它表示日期字符串是UTC时区。 所以你不需要设置格式化程序的时区。 格式化程序可以识别字符Z的时区。 因此,如果忽略它,那么除非将时区指定给dateFormatter,否则时区中会出现不匹配。

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

除非日历字符串和系统日历的日历类型发生变化,否则不需要将日历设置为dateFormatter。


我试图做同样的事情,但在我的情况下,JSON日期还包括毫秒,日期来自MongoDB。

这是格式化片段,当你有毫秒(例如2014-02-27T09:30:00.000Z

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSz"];

请使用以下适合我的完美代码。

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

- (NSDate*)dateWithJSONString:(NSString*)dateStr
{
    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    NSDate *date = [dateFormat dateFromString:dateStr];

    // This is for check the output
    // Convert date object to desired output format
    [dateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; // Here you can change your require output date format EX. @"EEE, MMM d YYYY"
    dateStr = [dateFormat stringFromDate:date];
    NSLog(@"Date -- %@",dateStr);

    return date;
}

日期格式问题

链接地址: http://www.djcxy.com/p/46661.html

上一篇: Parse JSON date into NSDate depending user settings

下一篇: Saving and retrieving date in Firebase