【问题标题】:NSDate String Returns nilNSDate 字符串返回 nil
【发布时间】:2016-05-16 15:57:10
【问题描述】:

我正在使用调试器跟踪代码,但我不明白为什么它返回 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];
}

【问题讨论】:

  • 试试HH而不是hh
  • 如@luk2302所说,使用24小时格式创建日期,然后再次设置格式以创建12小时格式的字符串。
  • 为什么要尝试使用相同的格式将字符串转换为日期,然后再转换回相同的字符串?为什么要为转换烦恼?
  • 这里是题外话,但有一些编码风格建议: 1) 如果参数 date 是字符串,请不要命名它。 2) 根本不需要 dateString 变量。只需使用参数。 3) 不要分配/初始化 dateFromString。你只是通过在下一行覆盖它来破坏它。

标签: objective-c string nsdate nsdateformatter


【解决方案1】:

不确定您是否只是通过从 string->date->string 转换来测试转换,或者可能是打算在不同的时区生成等效的字符串。

以下内容会将描述日期的输入字符串转换为描述设备时区中同一日期的字符串。可以通过设置格式化程序的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];
}

【讨论】:

  • 谢谢!现在效果很好 [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ"; // 这是一个没有毫秒的 RFC3339 日期 NSDate *date = [dateFormatter dateFromString:dateString]; [dateFormatter setDateFormat:@"MM/dd/yyyy"];
【解决方案2】:

您经过的时间采用 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];
}

【讨论】:

  • 1) 您应该始终以日期格式使用ahh。 2) 你怎么知道 OP 希望结果是那种格式?
  • 好吧,他有一个字符串中的日期并从中获取一个字符串,我假设他正在尝试花费 24 小时并将其格式化为 12 小时。
猜你喜欢
  • 2015-07-09
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
相关资源
最近更新 更多