日期转换问题

652 阅读1分钟

iOS15.4及以上系统
当手机设置为12小时制时会在转换后的日期字符串中间出现“上午”,“下午”,“AM”,“PM”字样
发生这种情况时系统中NSDateFormatter 会重写你设置的格式字符串,故而产生意想不到的结果
例如“20220714上午082013”
如果你把日期转成字符串是希望展示给用户看的,那么使用用户设置的时间格式和日历是合理的,但是如果你是希望把日期返回给后端处理或者归档,那么就应该使用固定格式的日期字符串 解决办法如下

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
        //formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 本地化YYModel的方式(这是一种专门设计用于生成美国英语结果的语言环境)
    dateFormatter.locale = [NSLocale systemLocale];
    
    //NSCalendarIdentifierISO8601是基于年、季度、周、日计算的日历,会出现YYYY的问题,所以用NSCalendarIdentifierGregorian比较好
    dateFormatter.calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    return dateFormatter;