iOS 时间戳 时区

时间戳

时间戳(Unix)是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。也就是说它表示的时间是唯一的

可以通过时间戳在线转换 看一看它的样子。

时间戳在线转换

时区

时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。
在中国采用首都北京所在地东八区的时间为全国统一使用时间。
正是由于时区的存在才导致当前时间显示不一样

北京东八区
旧金山西八区

可以看到 北京 和 旧金山 分别处于两个不同的时区,导致当前显示的时间也不一样。

不同时区间的时间切换

在很多app中都会有这个需求,根据服务器返回的时间与当前的时间作比较。比如服务器返回一个时间字符串,就以上面的截图为例吧,返回 2017-06-15 19:40:00 西八区的时间,获取当前用户所在区的时间。
现在处理下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    //服务器获取的时间是 西八区的 2017-06-15 19:40:00
    NSString *serverTimeStr = @"2017-06-15 19:40:00";
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"US/Pacific"]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date = [dateFormatter dateFromString:serverTimeStr];

    
    //当前时区的时间 这里是 东八区
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    NSString *time = [dateFormatter stringFromDate:date];
    NSLog(@"服务器 时间 %@", serverTimeStr);
    NSLog(@"用户所在时区 时间 %@", time); 
}

输出结果

可以对比下上面两张图片 是正确的 至于为啥一个39秒 一个40面纯属截图手速问题。
将手机时区调成 休斯顿
输出结果

输出结果表明 用户所在时区休斯顿比服务器返回的 旧金山 快两个小时,而休斯顿是位于西六区的, 所以结果西六区比西八区慢两小时也是正确的。
地理没学好,不会算的可以看这张图。
时区划分

不常见的时间表示

**2017-06-08T11:29:29.209Z **
这里面实际上已经包含了时区的信息。对应的时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ 处理方法呢和上面类似,就不啰嗦了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,218评论 6 13
  • 在iOS开发中,经常会遇到各种各样的时间问题,8小时时差,时间戳,求时间间隔,农历等等。解决办法网上比比皆是,但大...
    真巧了_嘿阅读 2,825评论 0 7
  • 主要有以下几个类: NSDate:表示一个具体的绝对的时间点。NSTimeZone:表示时区信息。NSLocale...
    献国阅读 5,305评论 0 4
  • 【幼儿说】原创,转载请标出处 最近看到英国一位小男孩的故事,很受感触。 这位小男孩叫尼克,尼克3岁时,妈妈离开了他...
    幼儿说阅读 415评论 0 3
  • 今天看资料书,重新梳理了一边Android的基本知识。被导师一阵忽悠,准备把自己整理的分享给大家,同时也为了自己日...
    与猎犬赛跑的野兔阅读 5,197评论 0 1