【问题标题】:NSDateFormatter dateFromString produces nil after first call in same methodNSDateFormatter dateFromString 在第一次调用相同的方法后产生 nil
【发布时间】:2011-11-09 21:31:12
【问题描述】:

在 Xcode 4 之前,我曾经使用 NSDate initFromString,但现在它已被弃用,并在 Xcode 4.2 中产生错误。所以我跳过去使用NSDateFormatter dateFromString,但在我调用的方法中遇到了一个问题,该方法从字符串中获取日出日期,从字符串中获取日落日期以确定它是白天还是黑夜(同样的方法)。第一次调用工作正常,但第二次调用返回 nil。我决定看看它是否可重复,所以我创建了以下简单方法并将其转储到另一个项目中一个无害的地方:

- (void)testDateFormatter 
  {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateFormat: @"yyyy-MM-dd hh:mm:ss Z"];
    NSString *srDateTimeString = @"2011-11-09 07:08:00 -0800";
    NSString *ssDateTimeString = @"2011-11-09 17:08:00 -0800";

    NSDate *sunriseDateTime = [formatter dateFromString: srDateTimeString];
    NSDate *sunsetDateTime  = [formatter dateFromString: ssDateTimeString];

    return;
  }

第一次调用返回正确的日期。第二次调用返回 nil。我尝试了几种变体(例如创建两个单独的 NSDateFormatter、预初始化日期、将日期预初始化为当前时间然后重新分配),但都没有达到预期的效果。

有人知道这里发生了什么吗?由于我在将它提交给 Apple 的任何地方都没有找到任何对此错误的引用(错误 #10420498)。

杰克

【问题讨论】:

  • 我在编辑时看到你在 testDateFormatter 之后没有 (),这似乎是一个错字,所以我更正了它。让你知道。
  • @Anders,这不是错字,Objective-C 没有将其参数列表放在括号中。
  • 澄清一下,您制作了两个单独的 NSDateFormatter 对象,分别发送了两个 dateFromString 和两个单独的字符串,但仍然发生这种情况?
  • 是的,我试过了。我现在在测试方法上再试一次。是的,同样的结果。刚刚添加了另一个格式化程序并将它们重命名为 formatter1 和 formatter2 等。第一个工作正常,第二个是 nil。

标签: objective-c nsdateformatter xcode4.2


【解决方案1】:

在第二个字符串中,小时为 17(24 小时格式),但格式字符串使用 hh(小写),表示 12 小时格式。

将格式字符串更改为yyyy-MM-dd HH:mm:ss Z。

在文档中,请参阅 Date Formatters,其中包含指向 Unicode Date Format Patterns 的链接,其中列出了每个格式说明符。

【讨论】:

  • 好吧,现在我觉得自己很愚蠢,但我也感谢您的更正。这当然工作得很好。是否有可能当 initFromString 仍在工作时,24 小时制的 hh 仍然有效?我之所以问,是因为我的代码文档中有一个指向 Unicode 日期格式模式文档的链接(这样我就不必一直弄清楚它在哪里)。不管怎样,我现在就去 Apple 撤消我的 bug。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多