【问题标题】:For iPhone OS 4.0 "dateFromString" method of NSDateFormatter returns nil对于 iPhone OS 4.0,NSDateFormatter 的“dateFromString”方法返回 nil
【发布时间】:2011-03-13 20:04:59
【问题描述】:

我正在使用以下代码,它在 iPhone OS 3.2 中运行良好

+(NSDate *)NSDateFromString:(NSString *)dateString
{

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *dateObj=[dateFormatter dateFromString:dateString];
    [dateFormatter release], dateFormatter=nil;
    return dateObj;
}

但是当我尝试使用与 iPhone OS 4.0 相同的代码时,dateObj 为 nil。

原因是:

NSDateFormatter 的- (id)init 方法仅在 iPhone OS 2.0 到 iPhone OS 3.2 中可用。 它在 iPhone OS 4.0 中已弃用。

现在解决方案是什么?如何初始化 NSDateFormater?有什么办法?

【问题讨论】:

  • 我们可以使用 NSDateComponents 将 NSString 转换为 NSDate,例如: NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:6]; [comps setMonth:5]; [comps setYear:2004]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDate *date = [gregorian dateFromComponents:comps]; [comps 发布];
  • 但是,现在如何处理 NSDateFormatter ?我们不能将它与 iPhone OS 4.0 一起使用吗?如果是,那么如何?
  • 只是因为它已被弃用并不意味着它不会工作 - 它可能在未来无法工作。如果您在调用 init 之后 NSLog(@"%@", dateFormatter); 会得到什么?如果您没有得到 nil,则此警告与您的问题无关。
  • -setDateFormat: 调用会覆盖之前的 -setDateStyle:-setTimeStyle:。这两个语句是不必要的。
  • NSDate *dateObj=[dateFormatter dateFromString:dateString];可以做些什么来获得正确的输出而不是“nil”???

标签: iphone nsdateformatter init


【解决方案1】:

- (id)init 在 iOS4 中不被 NSDateFormatter 弃用。这是文档中的错误。

【讨论】:

  • 我在想这一定是这样 - 这是否记录在 Apple 开发者论坛等的任何地方?
【解决方案2】:

[NSDateFormatter dateFormatFromTemplate:options:locale:] 可能会更好

NSString *format = [NSDateFormatter
                   dateFormatFromTemplate:@"Mdjm"
                                  options:0
                                   locale:[NSLocale currentLocale]];

// "M/d h:mm a" // 为美国语言环境返回美国英语格式

[dateFormatter setDateFormat:format];
NSDate *date = [dateFormatter dateFromString:dateString];

【讨论】:

    【解决方案3】:

    在 iOS2.x 和 3.x 中,NSDate description/datefromstring 函数返回: 2010-09-24 17:30:00 - 0700

    在 iOS 4.1 中它返回: 2010-09-25 00:30:00 GMT

    您可以向苹果提交错误。它甚至不遵循规定它应该为偏移返回 0000 的规范。因此,它不仅不返回本地日期,而且还使用 GMT 而不是偏移量。这种新格式似乎与 NSDateFormatter 方法不兼容。

    另外,我不认为这是文档中的错误。在 API Diff 文档中,它列出了为 NSDateFormatter 删除的 init。

    【讨论】:

    • 更令人费解的是,如果您将设备配置从 24 小时制更改为 12 小时制,结果会有所不同:S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多