我正在尝试将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 ...
答案 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);