NSDate和NSString相互转换注意事项

偶然翻看AliyunOSSSDK源码的时候,发现NSDate+OSS.h中NSDate和NSString相互转换的源码如下:

NSString * const serverReturnDateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";

+ (NSDate *)oss_dateFromString:(NSString *)string {
    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
    dateFormatter.dateFormat = serverReturnDateFormat;
    
    return [dateFormatter dateFromString:string];
}

- (NSString *)oss_asStringValue {
    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
    dateFormatter.dateFormat = serverReturnDateFormat;
    
    return [dateFormatter stringFromDate:self];

不知道大家注意到下面这两个设置

    dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];// 设置时区
    dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; // 设置地域

如果没有这两个设置的话,如果你改一下系统设置:语言设置成印度尼西亚文,时间设置成12小时制。那么转换过来的时间字符串为2019-02-2810.09.14PM, 时间变成‘.’连接了
要想正确格式化时间就必须设置这两个属性。

个人博客地址:https://youyou0909.github.io

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容