如果手机设置的是12小时制时间(hh),而转换时间和格式为24小时制(HH),那么得到的时间为nil 所以要判断当前手机时间格式再转换
下面两种情况获得的date 都为nil
//1.如果手机是12 小时间制时间 下面代码得到的date 为nil
NSString* str = @"20230410133113";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate* date = [formatter dateFromString:str];
//2.不论手机是12小时间还是24小时,下代码得到的都为 nil
NSString* dateStr = @"20230410133113";
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *zh_CNLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.locale =zh_CNLocale;
[dateFormatter setDateFormat:@"yyyyMMddhhmmss"];
NSDate* date = [dateFormatter dateFromString:dateStr];
NSLog(@"date = %@", date);
//这样得到的date 为 nil.
如果想要获取正确的值,继续往下看
1. 如果不论手机设置的是12 小时制,还是24小时制都想获取24小时制用如下代码
NSDate* date = [NSDate date];
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
//设置本地区就可以得到24小时制时间,不论手机是12不时制还是24小时制
NSLocale *zh_CNLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.locale =zh_CNLocale;
[dateFormatter setDateFormat:@"yyyyMMddHHmmss"];
NSString* dateString = [dateFormatter stringFromDate:date];
NSLog(@"dateTime = %@", dateString);
2. 如果想得到和手机一相的时间手机设置的是12小时制就得到12小时制时间,手机是24小时制就得到24小时间制时间
代码如下
NSString *str = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
//hasAMPM==TURE为12小时制,否则为24小时制
BOOL hasAMPM = containsA.location != NSNotFound;
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
formatterOne.calendar = gregorian;
if (hasAMPM)
{
[formatter setDateFormat:@"yyyyMMddhhmmss"];
}
else
{
[formatter setDateFormat:@"yyyyMMddHHmmss"];
}