NSDateFormatter: dateFromString returns 无

NSDateFormatter: dateFromString returns nil

我有以下格式的日期:

    NSString *dateString = @"1996-08-09T07:00:00Z";

我只需要从上面的日期中提取年份:

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
    [dateFormat setLocale:[NSLocale currentLocale]];
    [dateFormat setDateFormat:@"yyyy"];
    [dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault];
    NSDate *date = [dateFormat dateFromString:dateString];
    NSLog(@"date : %@", date);

日志:

    2016-02-15 06:36:47.496 App[46714:5560483] date : (null)

我什至尝试过:

    [dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]

但无济于事。

格式:

yyyy

不匹配日期字符串:

1996-08-09T07:00:00Z

因此 [NSDateFormatter dateFromString:] 返回 nil

您想要这种格式:

yyyy-MM-dd'T'HH:mm:ssZ

(请注意 X 说明符是 documented 作为 Z(祖鲁时间)的正确说明符但是在与@rmaddy 的讨论中,他说服我 Z 是正确的用法。)

然后使用 NSDateComponents.

提取年份

设置日期格式为

                            1996-08-09T07:00:00Z
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];

更新

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormat setLocale:[NSLocale currentLocale]];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
[dateFormat setFormatterBehavior:NSDateFormatterBehaviorDefault];
NSDate *date = [dateFormat dateFromString:@"1996-08-09T07:00:00Z"];
NSLog(@"date : %@", date);
[dateFormat setDateFormat:@"yyyy"];
NSString *finalStr = [dateFormat stringFromDate:date];
NSLog(@"finalStr : %@", finalStr);

输出

试试这个功能:

 +(NSDate *)convertUTCDateLocal:(NSString*)inputString
{
    NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:sszz";
    //for input
    NSTimeZone *inputTimeZone =[NSTimeZone timeZoneWithName:@"UTC"];
    NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init];
    [inputDateFormatter setTimeZone:inputTimeZone];

    //NSString *inputString = @"2015-07-31T14:00:00+0000";
    [inputDateFormatter setDateFormat:dateFormat];
    NSDate *date = [inputDateFormatter dateFromString:inputString];

    //for output
    NSDateFormatter *outputDateFormatter = [[NSDateFormatter alloc] init];
    [outputDateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    [outputDateFormatter setLocale:[NSLocale currentLocale]];
    [outputDateFormatter setDateFormat: @"yyyy"];

    NSString *outputString = [outputDateFormatter stringFromDate:date];

    NSDate *outputDate = [outputDateFormatter dateFromString:outputString];

    return outputDate;
}