IOS 字符串转时间时12小时制24小时制的处理。

如果手机设置的是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"];
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值