nsformatter dateFromString为nil

时间:2012-07-23 11:27:37

标签: objective-c nsdateformatter

我正在使用xcode,目标c和ios 5最低限度的iphone应用程序。 我想要做的就是将字符串转换为日期。我已经阅读了很多内容,这应该是一个简单的直接任务。我在论坛上看到过很多这样的问题,但对人们有用的东西似乎并不适合我。 这就是我正在做的事情

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dobText = [dict valueForKey:@"DateOfBirth"];
NSDate *dobDate = [dateFormatter dateFromString:dobText];

dobText始终采用格式@“1999-01-01”,它与日期格式化程序中设置的日期格式相匹配,但使用字符串中的日期时的结果始终为nil。

任何人都可以向我解释这个并让我知道如何解决它吗?

4 个答案:

答案 0 :(得分:0)

您确定日期在您从dict获得的数据中使用的是-而不是。当我使用 (alt + - )

时,我可以重现无结果
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *dobText = @"2009-02-12";
    NSDate *dobDate = [dateFormatter dateFromString:dobText];
    NSLog(@"%@", dobDate);  

尝试这样做,可能会解决您的问题。

 NSString *dobText = [[dict valueForKey:@"DateOfBirth"] stringByReplacingOccurrencesOfString:@"—" withString:@"-"];

答案 1 :(得分:0)

查看设备上的用户首选项。文档说:

  

请注意,虽然在中设置了格式字符串(setDateFormat :)   原则规定了一种确切的格式,但在实践中它可能仍然存在   也会被用户的偏好覆盖 - 请参阅Data Formatting Guide   了解更多详情。

答案 2 :(得分:0)

我怀疑像大公里说的那样,你的破折号可能会妨碍你。

我建议你先尝试一个虚拟字符串。 e.g。

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dobText = @"1999-01-01" // [dict valueForKey:@"DateOfBirth"];
NSDate *dobDate = [dateFormatter dateFromString:dobText];

现在有效吗?这应该。现在以另一种方式进行三角测量:

  1. 从dob文本中完全删除破折号,使其格式为'yyyyMMdd'
  2. 让日期格式化程序查找相同的格式
  3. 这有用吗?这应该。这将证明您的格式中的分隔符是问题,需要进一步检查(或清理为bigkm建议)。

    侧节点重新线程:如果在创建它的线程上使用它,NSDateFormatter就可以了。如果你不这样做,你就会知道应用程序会崩溃。

答案 3 :(得分:0)

如果您的日期格式正确,我建议您将NSLocale设置为您的NSDateFormatter。

对我来说,这段代码适用于模拟器:

NSString *format = [NSString stringWithFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:format];
NSDate *date = [df dateFromString:pubDateSttring];

但在设备上的日期始终为NIL。

我找到了设置NSLocale的解决方法:

df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];