zoukankan      html  css  js  c++  java
  • iOS 时区获取问题

      

    时区缩写 UTC, CST, GMT, CEST 以及转换

    UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH)负责保持的以秒为基础的时间标度。UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例,UTC时间是零点,北京时间为1999年1月1日早上8点整。

    GMT(Greenwich Mean Time)是格林尼治平时: 
    由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。 为了确保协调世界时与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。

    也就是说,UTC 基本上等于GMT

    CET

    (英語:Central European Time,CET)欧洲中部时间是比世界标准时间(UTC)早一个小时的时区名称之一。它被大部分欧洲国家和部分北非国家采用。冬季时间为UTC+1,夏季欧洲夏令时为UTC+2

    CEST

    欧洲中部夏令时间(Central European Summer Time,简称CEST)比世界标准时间(UTC)早两个小时的时区名称之一。它被大部分欧洲国家和部分北非国家在夏天采用(UTC+2),冬季这些国家使用欧洲中部时间(UTC+1)

    时区在线转换工具网站  http://www.timebie.com/timezone/centraleuropeansummerbeijing.php 

    CST

    CST却同时可以代表如下 4 个不同的时区: 

    Central Standard Time (USA) UTC-6:00 

    Central Standard Time (Australia) UTC+9:30 
    China Standard Time UTC+8:00 
    Cuba Standard Time UTC-4:00 
    可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。 也就是说,这个需要根据使用的场景来确定使用的是哪个时区。

    ////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////

    1. 标准的获取时区的正确方法

      [NSTimeZone resetSystemTimeZone]; // 重置手机系统的时区

        NSInteger offset = [NSTimeZone localTimeZone].secondsFromGMT;

        offset = offset/3600;

        NSString *tzStr = [NSString stringWithFormat:@"%ld", (long)offset];

     获取的时区:(Asia/Shanghai (GMT+8) offset 28800)

    2.  截取 GMT 方法

        //获取当地的时区

        NSString *tzStr;

        NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];

        NSArray *zoneArray = [[NSString stringWithFormat:@"%@", localTimeZone] componentsSeparatedByString:@"GMT"];

        NSString *tempTZ = [NSString stringWithFormat:@"%@", zoneArray.lastObject];

        // eg: +8 去掉"+", -8 传入全部, +0 / -0

        // - 1 ~ 12, + 1 ~ +12, 0

        if([tempTZ hasPrefix:@"+"]) {

            tzStr = [NSString stringWithFormat:@"%c", [tempTZ characterAtIndex:1]];

        }else  if([tempTZ hasPrefix:@"-"]){

            tzStr = [NSString stringWithFormat:@"%@", [tempTZ substringToIndex:2]];

        }else if([tempTZ hasPrefix:@"0"]) {

            tzStr = [NSString stringWithFormat:@"%@", [tempTZ substringToIndex:1]];

        }

    获取的时区: Europe/Berlin (CEST) offset 7200 (Daylight)

    鉴于有些时区非携带 GMT 格式吗故 "方法二 " 不可行, 采用 "方法一".

    根据距离 0 时区偏差的秒数算出时区. 

  • 相关阅读:
    mysql limit
    random.nextint()
    “MSDTC 事务的导入失败: Result Code = 0x8004d00e。
    JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
    iOS ERROR: unable to get the receiver data from the DB 解决方式
    STL algorithm算法mov,move_backward(38)
    看 《一次谷歌面试趣事》 后感
    C++胜者树
    拿年终奖前跳槽,你才是赢家!
    日期字符串格式化成日期/日期格式化成指定格式字符串
  • 原文地址:https://www.cnblogs.com/lurenq/p/7109676.html
Copyright © 2011-2022 走看看