1

我正在使用 xcode、objective 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" 格式,它与日期格式化程序中设置的日期格式相匹配,但使用字符串中的日期时的结果始终为零。

谁能向我解释一下,让我知道如何解决?

4

4 回答 4

0

我怀疑就像 bigkm 说的那样,您的破折号可能会妨碍您。

我建议你先尝试一个虚拟字符串。例如

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. 让日期格式化程序查找相同的格式

那样有用吗?它应该。这将证明您格式中的分隔符是问题所在,需要进一步检查(或按照 bigkm 的建议进行清理)。

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

于 2012-07-23T14:18:17.857 回答
0

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

请注意,尽管设置格式字符串 (setDateFormat:) 原则上指定了精确的格式,但实际上它也可能被用户的偏好所覆盖——有关更多详细信息,请参阅数据格式指南

于 2012-07-23T11:46:34.987 回答
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"];
于 2014-03-04T15:59:49.603 回答
0
于 2012-07-23T11:44:33.827 回答