NSDate String返回nil

时间:2016-05-16 15:57:11

标签: objective-c string nsdate nsdateformatter

我使用调试器跟踪代码,但我不明白为什么它会返回nil而不是日期。

将其传递给它:2016-02-12T19:47:29+0000

-(NSString*)formatDate:(NSString*)date {
    NSString *dateString = date;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'hh:mm:ssZ";

    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];

    return [dateFormatter stringFromDate:dateFromString];
}

2 个答案:

答案 0 :(得分:1)

不确定您是否只是通过来自string-> date->字符串来测试转化,或者可能意图是在不同时区生成等效字符串。

以下内容将描述日期的输入字符串转换为描述设备时区中相同日期的字符串。通过设置格式化程序的timeZone ...

可以实现不同的时区
-(NSString*)formatDate:(NSString*)dateString {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";  // this is an RFC3339 date without milliseconds

    NSDate *date = [dateFormatter dateFromString:dateString];

    // to convert to a different timezone, try, for example:
    // dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"EST"];
    return  [dateFormatter stringFromDate:date];
}

答案 1 :(得分:0)

您传递的时间是24小时格式,您必须使用HH NSDateFormatter才能阅读此内容。创建NSDate后,您可以使用hh设置新格式12小时。

这是代码。

-(NSString*)formatDate:(NSString*)date {

    NSString *dateString = date;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";

    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    NSDate *dateFromString = [dateFormatter dateFromString:dateString];
    dateFormatter.dateFormat = @"yyyy-MM-dd'T'hh:mm:ssZ";

    return   [dateFormatter stringFromDate:dateFromString];
}