2

我正在尝试将字符串转换为 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)

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

4

3 回答 3

4

它可能依赖于语言环境,但与

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

它应该适用于所有设备。

于 2013-08-15T17:22:43.550 回答
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];
}
于 2013-08-15T17:15:16.937 回答
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);
于 2013-08-15T17:16:19.210 回答