字符串时间和NSDate相互转换的坑

项目中服务器传回来的时间是这种格式的 Sep 5, 2016 6:59:05 PM
现在要将这段字符串转换成 2016-09-05 06:59

被坑的地方有2个点

  1. 服务器传回来的英文的Sep,调试的时候格式化用 MMM ,一直返回nil,后面通过反向打印发现返回的是 9月 中文字符 ,我晕,原来手机的格式化跟本机的中英文环境有关,这里需要加一个强制转换成英文时区
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
  1. 第二个坑的地方 一直不知道am,pm这种怎么格式化,在网上搜到说是用 tt ,然后怎么调试都没法解析出来当前的时间,最后没有办法了,只有求助谷歌大神,在stackoverflow中看到格式化用 a 就好,修改好能够很好的运行

完整版的解析代码如下:

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    formatter.dateFormat = @"MMM d , yyyy h:mm:ss a";
    
    NSDate *date = [formatter dateFromString:@"Sep 5 , 2016 11:17:08 AM"];
    NSLog(@"%@",date);
    
    //将NSDate转换成指定格式的字符串
    [formatter setDateFormat:@"yyyy-MM-dd hh:mm "];
    
    NSString *dateString = [formatter stringFromDate:date];
    
    NSLog(@"%@",dateString);

一个小小的时间转换花掉了不少时间,主要还是自己学艺不精啊,以后还要多多努力,学到老,活到老!

原文地址:https://www.cnblogs.com/qqcc1388/p/5868462.html