从NSDateFormatter获取Null

时间:2013-08-15 17:07:56

标签: objective-c nsstring nsdate nsdateformatter

我正在尝试将String转换为NSDate,但我得到Null。

示例字符串输入是= 8/8/2013 12:32:22 PM

代码:

[self.dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
NSLog(@"Date %@", [[communications objectAtIndex:x] objectForKey:@"dateUpdated"]);
NSDate *date = [[NSDate alloc] init];
date = [self.dateFormat dateFromString:[[communications objectAtIndex:x] objectForKey:@"dateUpdated"]];
NSLog(@"Date from NSDate %@", [self.dateFormat stringFromDate:date]);

我做错了什么?

示例NSLog输出

2013-08-15 13:01:59.409 HD[478:907] Date 8/8/2013 12:32:22 PM
2013-08-15 13:01:59.412 HD[478:907] Date from NSDate (null)  
2013-08-15 13:01:59.418 HD[478:907] Date 8/12/2013 9:45:18 AM
2013-08-15 13:01:59.419 HD[478:907] Date from NSDate (null)
2013-08-15 13:01:59.421 HD[478:907] Date 8/12/2013 9:45:20 AM
2013-08-15 13:01:59.423 HD[478:907] Date from NSDate (null)
2013-08-15 13:01:59.430 HD[478:907] Date 8/12/2013 4:10:49 PM
2013-08-15 13:01:59.431 HD[478:907] Date from NSDate (null)

注意:真正奇怪的是,如果我在Simulator上运行相同的代码,它可以正常工作并且大多数设备。出于某种原因,如果我在一些最新的设备上运行它,它将返回null ...

3 个答案:

答案 0 :(得分:4)

它可能与语言环境有关,但有

[self.dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

它应该适用于所有设备。

答案 1 :(得分:1)

进行这些更改,然后向后报告:

[self.dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
NSLog(@"Date %@", [[communications objectAtIndex:x] objectForKey:@"dateUpdated"]);
NSDate *date = [self.dateFormat dateFromString:[[communications objectAtIndex:x] objectForKey:@"dateUpdated"]];
NSLog(@"Date from NSDate %@", [self.dateFormat stringFromDate:date]);

还要确保

if (!self.dateFormat) {
    self.dateFormat = [[NSDateFormatter alloc] init];
}

答案 2 :(得分:0)

首先,尝试检查您的代码是否单件工作。例如,尝试查看将在-dateFromString中使用的NSString:方法是所需的格式。此外,为了检查您的代码是否正常工作,您还要将操作从NSDate恢复为NSString。

我尝试了以下代码,效果很好。所以肯定,你的错误在其他地方,但不是在日期格式本身。检查您的NSDateFormatter是否已正确启动。

NSString *dateString = @"8/8/2013 12:32:22 PM";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];

NSDate *date = [dateFormatter dateFromString:dateString];

NSLog(@"date = %@", date);