无法格式化由Facebook创建的日期,返回NULL日期

时间:2016-04-30 09:05:18

标签: ios objective-c nsdate nsdateformatter date-formatting

Facebook以下列格式提供日期对象:2010-12-01T21:35:43+0000

我想将此格式转换为NSDate。

我正在使用以下代码。为什么返回null

NSDateFormatter *df = [[NSDateFormatter alloc] init];
dateString = [dateString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
dateString = [dateString stringByReplacingOccurrencesOfString:@"+" withString:@" +"];
NSLog(@"%@", dateString);
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss '+'ZZZZ"];
NSLog(@"%@",df.dateFormat);
NSDate *date = [df dateFromString:dateString];

NSLog(@"%@ date",date);

3 个答案:

答案 0 :(得分:1)

只需在代码中将'+'ZZZZ替换为+zzzz ..

    NSString *dateString=@"2010-12-01T21:35:43+0000";

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    dateString = [dateString stringByReplacingOccurrencesOfString:@"T" withString:@" "];
    dateString = [dateString stringByReplacingOccurrencesOfString:@"+" withString:@" +"];
    NSLog(@"%@", dateString);
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss +zzzz"];
    NSLog(@"%@",df.dateFormat);
    NSDate *date = [df dateFromString:dateString];

    NSLog(@"%@ date",date);

输出是:

2016-04-30 14:52:10.118 date[2523:187669] 2010-12-01 21:35:43 +0000
2016-04-30 14:52:10.120 date[2523:187669] yyyy-MM-dd HH:mm:ss +zzzz
2016-04-30 14:52:10.153 date[2523:187669] 2010-12-01 21:35:43 +0000 date

答案 1 :(得分:0)

您无需替换字符串

中的任何字符

试试这段代码:

目标-C

NSString *dateString=@"2010-12-01T21:35:43+0000";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSDate *date = [df dateFromString:dateString];
NSLog(@"%@ date",date);

夫特:

let dateString: String = "2010-12-01T21:35:43+0000"
let df: NSDateFormatter = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
let date: NSDate = df.dateFromString(dateString)!
print("date: \(date)")

答案 2 :(得分:-1)

只需对yyyy-MM-dd'T'HH:mm:ssZ使用dateFormat,就不要乱用字符串操作。

您可能想要做的唯一事情就是按照Apple Technical Q&A 1480中的说明设置locale,这样无论设备可能具有哪种日历设置,这都会有效:

df.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];