NSString格式的日期返回null iOS?

时间:2016-03-18 18:49:19

标签: ios objective-c nsstring nsdate

我以NSString格式获取日期" 2016-03-16T00:00:00.000 + 05:30" 我使用以下方法将NSString日期转换为正确的NSDate格式,并返回null。

NSString *dateString = @"2016-03-16T00:00:00.000+05:30";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'hh:mm:ssZZZ"];
NSDate *dateFromString = [[NSDate alloc] init];

dateFromString = [dateFormatter dateFromString:dateString];

//dateFromString returns null.

请帮忙

我已使用此代码更新

    NSString *strDateFor = [polygon valueForKey:@"effective_from"];
    NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
    [dateformate setDateFormat:@"yyyy-MM-dd 'T' HH:mm:ss ZZZZ"];
    NSDate *date = [dateformate dateFromString:strDateFor];
    NSLog(@"date : %@",date); //null
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
    [dateFormat setDateFormat:@"dd-MM-yyyy"];
    NSString *strDate = [dateFormat stringFromDate:date];
    NSLog(@"The strDate is - %@", strDate); //null

再次为空

1 个答案:

答案 0 :(得分:2)

首先,该行:

NSDate *dateFromString = [[NSDate alloc] init];

没有任何意义,因为你没有使用你在这里创建的NSDate实例。把它留下来吧。

其次,如果你解析这样的日期字符串,总是设置日期格式化程序的locale。默认情况下,NSDateFormatter使用用户当前的区域设置,可以是任何内容,因此您无法依赖它。您可能需要en_US_POSIX语言环境,因为它保证将来不会更改。

第三,您的日期格式字符串错误,因为您没有指定小数秒(.SSS)。

这有效:

NSString *dateString = @"2016-03-16T00:00:00.000+05:30";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"];
NSDate *dateFromString = [dateFormatter dateFromString:dateString];