Getting Null from NSDateFormatter

2019-01-20 04:59发布

I am trying to convert a String into NSDate, but I am getting Null.

Sample String Input is = 8/8/2013 12:32:22 PM

Code:

[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]);

What am I doing wrong?

Sample NSLog Output

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)

Note: What's really strange is that if I run the same code on Simulator it works fine and most devices. For some reason, if I run it on a handful of devices that are all up to date, it returns null...

3条回答
爷的心禁止访问
2楼-- · 2019-01-20 05:40

Make these changes, then report back:

[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]);

Also make sure

if (!self.dateFormat) {
    self.dateFormat = [[NSDateFormatter alloc] init];
}
查看更多
淡お忘
3楼-- · 2019-01-20 05:46

It is probably locale-dependent, but with

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

it should work on all devices.

查看更多
放我归山
4楼-- · 2019-01-20 05:48

First of all, try to check if your code is working in single pieces. For instance, try to see the NSString that is going to be used in -dateFromString: method is in the desired format. Also, in order to check if your code is working, you're reverting the operation from NSDate to NSString.

I have tried the following code and it works well. So definitely, your error is somewhere else, but not in the date format itself. Check also if your NSDateFormatter was properly initilized.

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);
查看更多
登录 后发表回答