我正在使用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。
任何人都可以向我解释这个并让我知道如何解决它吗?
答案 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];
现在有效吗?这应该。现在以另一种方式进行三角测量:
这有用吗?这应该。这将证明您的格式中的分隔符是问题,需要进一步检查(或清理为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"];