iOS NSDate和UTC时区时间的转化

1 篇文章 0 订阅
1 篇文章 0 订阅

iOS开发过程中,服务端为了兼容国际化,返回给客户端的时间是带有时区的字符串格式(例如:“2020-02-25T06:02:44.000+0000”),我们需要把它转化成本地时区的时间(例如:2020-02-25 14:02:44)。

/**

  • 将UTC日期字符串转为本地时间字符串
  • eg: 2020-02-21T07:24:41.000+0000 -> 2020-02-21 15:24:41
    */
  • (NSString *)getLocalDateFormateUTCDate:(NSString *)utcStr
    {
    //ISO 8601 格式的时间转换
    [self.formatter setDateFormat:@“yyyy-MM-dd’T’HH:mm:ss.SSSZZZ”];
    NSDate *date = [self.formatter dateFromString:utcStr];

    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    format.dateFormat = @“yyyy-MM-dd HH:mm:ss”;
    NSString *dateString = [format stringFromDate:date];

    return dateString;
    }

处理的思路是,先将UTC时间字符串直接转换成带时区格式的NSDate,然后设置新的时间格式去接收,使用stringFromDate:方法将带时区格式的NSDate转换成新的字符串。UTC时间字符串虽然带了时区格式,但是实际时区是0,stringFromDate:内部在UTC时间的基础上加上硬件系统当前的时区,然后返回当前的时间。

GMT(Greenwich Mean Time) 格林尼治时间,是以太阳一天之中的位置为根据的时间,地点在英国伦敦的格林尼治天文台;是早起的世界共用时间。(后来被发现时间不够精准,因为地球自转的速度正在变慢)。

UTC(Coordinated Universal Time )是根据原子的物理特性,以原子钟来衡量的时间,精度非常高;是世界标准时间,不属于任何时区。

iOS获取当前时间:

NSDate *date = [NSDate date];
NSLog(@“date = %@” , date);在这里插入图片描述
这里直接通过+date方法获取的时间是已经在UTC时间的基础上转换过当前时区了,获取的就是当前所在地的时间。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @“yyyy-MM-dd HH:mm:ss”; [formatter setTimeZone:[NSTimeZone timeZoneWithName:@“Asia/Tokyo”]];
NSString *string = [formatter stringFromDate:date]; NSLog(@“string = %@” , string);
在这里插入图片描述
这里是将时区设置成东京,获得的时间就是有一个小时时差的东京时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值