nsformatter dateFromString是零

问题描述:

我正在使用xcode,目标c和目标ios 5最小的iphone应用程序。 我所要做的就是将字符串转换为日期。我已经阅读过很多,它应该是一个简单而直接的任务。我在论坛上看到过许多其他类似的问题,但是为人们工作的东西似乎不适合我。 下面是我在做什么nsformatter dateFromString是零

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

的dobText总是在格式@“1999-01-01”使用日期从字符串时总是无相匹配的日期格式的日期格式设置,但结果。

任何人都可以解释这一点给我,让我知道如何解决它?

+1

的代码应该工作。如果你手动设置dobText(dobText = @“1999-01-01”;) – vakio 2012-07-23 11:33:12

+0

是的,即使手动输入到dobText或甚至到[dateFormatter dateFromString:@“1999-01-01”]; – glogic 2012-07-23 11:34:44

+0

它看起来不错,但是如果您在后台线程中使用NSDateFormatter,则会出现一些问题。你在做那个吗? http://*.com/questions/5638416/datefromstring-always-returns-null-with-dateformatter – 2012-07-23 11:44:52

你确定日期在你从字典中得到的数据中使用的是-而不是。我可以重现无结果当我使用一个(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:@"-"]; 

看看你的设备上的用户喜好。该文件说:

注意的是,虽然在 原则上设置一个格式字符串(setDateFormat :)指定一个确切的格式,在实践中可能仍然 也可以通过用户的覆盖偏好,看到Data Formatting Guide 了解更多详情。

我怀疑像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文字完全删除破折号,使之具有格式为“年月日”
  2. 将日期格式看看这个相同的格式

这是否工作?这应该。这将证明您的格式中的分隔符是问题,需要进一步检查(或按照大公司的建议进行清理)。

副节点重新线程化:如果您在创建它的线程上使用它,NSDateFormatter会很好。如果你不知道,你会知道该应用程序会崩溃。

如果您的日期格式正确,我可以建议将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]; 

,但对设备日期始终为零。设置NSLocale的

我找到了解决方法:

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