美文网首页
转换时间遇到的坑

转换时间遇到的坑

作者: alexCzs | 来源:发表于2017-01-04 19:04 被阅读0次

    app里因为时区问题,所以需要进行时间转换,下面是我们常用的时间转换的方法
    遇到的问题:将北京时间2015-12-28转换成当地时间,使用的系统时区为东八区,讲道理应该转成的时间是一致的,但是得到的结果却很让我意外,是2016-12-28,时间居然差了一年.废话不多说,直接上代码

    //TimerTansform
    @interfaceTimerTansform :NSObject
    + (NSString*)convertBeijingTimeToLocalTime :(NSString*)beijingTimeString;
    @end
    @implementationTimerTansform
    + (NSString*)convertBeijingTimeToLocalTime :(NSString*)beijingTimeString {
    return[selfconvertBeijingTimeToLocalTime:beijingTimeStringdateFormatterString:@"YYYY-MM-dd HH:mm:ss"];
    }
    + (NSString*)convertBeijingTimeToLocalTime:(NSString*)beijingTimeString dateFormatterString:(NSString*)dateFormatterString{
    NSTimeZone*beijingTimeZone = [NSTimeZonetimeZoneWithName:@"Asia/Beijing"];
    NSDateFormatter*formatter = [[NSDateFormatteralloc]init];
    [formattersetDateFormat:dateFormatterString];
    formatter.timeZone= beijingTimeZone;
    NSDate*serverTime = [formatterdateFromString:beijingTimeString];
    NSTimeZone*localTimeZone = [NSTimeZonesystemTimeZone];
    formatter.timeZone= localTimeZone;
    NSString*localTimeString = [formatterstringFromDate:serverTime];
    NSLog(@"server: %@local: %@", beijingTimeString, localTimeString);
    returnlocalTimeString;
    }
    @end
    //调用方法
    -(void)transform{
    NSString*str = [NSStringstringWithFormat:@"2015-12-28 00:00:00"];
    str = [TimerTansformconvertBeijingTimeToLocalTime:str];
    }
    

    输出的日志为:server: 2015-12-28 00:00:00local: 2016-12-28 00:00:00
    但是如果把 YYYY-MM-dd HH:mm:ss 改成 yyyy-MM-dd HH:mm:ss
    输出的日志为:server: 2015-12-28 00:00:00local: 2015-12-28 00:00:00

    结论

    大家在格式化时间的时候需要注意一个地方:
    yyyy-MM-dd HH:mm:ss 与 YYYY-MM-dd HH:mm:ss 转化出来的时间可能会出现不一样(在年底与年初的那几天),后者转出来的时间可能会比真实的时间多一年或者少一年。yyyy是真实的年,YYYY表示的是周所在的年
    详情可以参考:https://segmentfault.com/q/1010000000174542 (有兴趣的可以试一下:)

    相关文章

      网友评论

          本文标题:转换时间遇到的坑

          本文链接:https://www.haomeiwen.com/subject/fvcavttx.html