在同一方法中第一次调用后,NSDateFormatter dateFromString生成nil

时间:2011-11-09 21:31:13

标签: objective-c nsdateformatter xcode4.2

在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。我尝试了几种变体(例如创建两个单独的NSDateFormatters,预先初始化日期,将日期预先初始化为当前时间,然后重新分配),但没有人做出预期的事情。

有谁知道这里发生了什么?因为我在向Apple提交错误的任何地方都没有找到任何引用(bug#10420498)。

杰克

1 个答案:

答案 0 :(得分:3)

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

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

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