【问题标题】:Producing an NSDate with NSDateFormatter Yielding nil NSDate Value使用 NSDateFormatter 生成 NSDate 产生 nil NSDate 值
【发布时间】:2011-07-25 02:20:35
【问题描述】:

我正在尝试从具有以下内容的字符串中生成日期:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss"];
NSLog(@"ENDINGDATE: %@", [closure objectForKey:@"ENDINGDATE"]);
NSDate *tempDate = [dateFormatter dateFromString:[closure objectForKey:@"ENDINGDATE"]];

ENDINGDATE NSLog 产生以下内容:

ENDINGDATE: April, 21 2011 20:00:00

一切似乎都很好,所以我很难理解为什么 tempDate 被设置为 nil。有任何想法吗?谢谢!

【问题讨论】:

    标签: iphone objective-c nsdate nsdateformatter


    【解决方案1】:

    请在删除逗号后尝试...

    您可以使用以下日期格式:

    d 以数字表示的月份日期;个位数天数没有前导零。

    dd 日期为数字;个位数天数前导零。

    EEE 星期几,三个字母的缩写。

    dddd 星期的全名。

    m 月份为数字;个位数月份没有前导零。

    mm 月份为数字;个位数月份的前导零。

    MMM 月份作为三个字母的缩写。

    mmmm 月份作为它的全名。

    yy 年份作为最后两位数;小于 10 的年份领先于零。

    yyyy 四位数字表示的年份。

    小时;个位数小时(12 小时制)没有前导零。

    hh 小时;个位数小时(12 小时制)的前导零。

    H 小时;个位数小时(24 小时制)没有前导零。

    HH 小时;个位数小时(24 小时制)的前导零。

    M 分钟;个位数分钟没有前导零。

    大写 M 与 CF timeFormat 的 m 不同,以避免与月份冲突。

    MM 分钟;个位数分钟前导零。

    大写 MM 不同于 CF timeFormat 的 mm 以避免与月份冲突。

    s 秒;个位数秒没有前导零。

    ss 秒;个位数秒的前导零。

    【讨论】:

    • 我认为小 m:s 用于几分钟,而不是几个月。
    【解决方案2】:

    , 放错了位置。它应该在MMMM 之后。所以格式应该定义为MMMM, dd yyyy HH:mm:ss

    [dateFormatter setDateFormat:@"MMMM, dd yyyy HH:mm:ss"];
    

    【讨论】:

    • 哇,简直不敢相信我没有发现这个问题。这确实解决了它。谢谢!
    【解决方案3】:

    是的,如果原型格式与实际格式不完全匹配,您将得到 nil。放错位置的逗号很可能是您的问题(或至少是部分问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2016-02-23
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多