时区

如果高中的地理学得好的话基本没什么难度,编程语言中也经常见到:UTC、GMT、ISO 等。

GMT:格林尼治(又称格林威治)标准时间;英国伦敦格林尼治定为 0° 经线开始的地方,地球每 15° 经度被分为一个时区,共分为 24 个时区(东西经各 12 个时区),相邻时区相差一小时;例如:中国北京位于东八区,GMT 时间比北京时间慢 8 小时。
由于地球不是完美球体且自转速度在变慢,导致以格林尼治天文台为基准时间实际上是不精确的。

UTC:世界协调时间;经严谨计算得到的时间,精确到秒,误差在 0.9s 以内,是比GMT更为精确的世界时间;为了更准确度量时间,科学家们发明了 UTC 时间,以铯原子跃迁次数来度量时间,比 GMT 时间更准确,为了保证 GMT 的准确性,每隔几年 GMT 时间会做一次调整,以与UTC时间对齐。

CST:编程语言中,一般不使用 CST 来代表中国的时区时间(浪子之前在 Java 中使用,解析失败,后来才明白)。CST 有四个不同时区的缩写:

  • Central Standard Time (USA) UT-6:00 美国标准时间
  • Central Standard Time (Australia) UT+9:30 澳大利亚标准时间
  • China Standard Time UT+8:00 中国标准时间
  • Cuba Standard Time UT-4:00 古巴标准时间

另外编程语言中输出时间你可能会见到下面的后缀:

格式 说明
UTC+8 东八区
GMT+8 同上
GMT+08:00 采用 GMT 时间并精确到分钟级别
GMT+08:00:00 采用 GMT 时间并精确到秒级别
GMT+0800 不显示冒号并采用 GMT 时间并精确到分钟级别
GMT+080000 不显示冒号并采用 GMT 时间并精确到秒级别
+08:00 精确到分钟级别
+08:00:00 精确到秒级别

除了上面的表示方式,还有以 区域/城市 的方式定义时区的,例如:Asia/Shanghai。如果你安装过 Linux 系统,大部分带有 GUI 的安装程序大都以该方式呈现。

最后说一下时间戳,1970年1月1日,这个日期也被称为 Unix 时间或 POSIX 时间,被许多 Unix 和类 Unix 系统和编程语言使用,如C/C++,Java,JavaScript,Perl,PHP,Python 和 Ruby 等等。

最初计算机操作系统是 32 位,而时间也是用 32 位表示。由于 32 位能表示的最大值是 2147483647。另外 1 年 365 天的总秒数是 31536000,2147483647 / 31536000 = 68.1,也就是说32位能表示的最长时间是 68 年,从 1970 年开始的话,加上 68.1,实际最终到 2038 年 01 月 19 日 03 时 14 分 07 秒,便会达到最大时间,过了这个时间点,所有32位操作系统时间便会变为 10000000 00000000 00000000 00000000,算下来也就是 1901 年 12 月 13 日 20 时 45 分 52 秒,这样便会出现时间回归的现象,很多软件便会运行异常了。使用 64 位整数数据类型来存储 Unix 时间可以解决此问题,因为它可表示的日期范围超过 5840 亿年。

参考:

ISO 8601:它是一种日期展现格式 YYYY-MM-DDTHH:mm:ss.sssZ;国内一般会使用 yyyy-mm-dd hh:mm:ss 的格式。还有很多其它格式,这里就不写在正文了,编程语言中格式化选项可能会默认提供(枚举类),在不同的国家使用不同的日期格式。

Unicode

Unicode 被设计为通用,唯一和统一,即代码涵盖所有主要的现代书面语言(通用),每个字符只有一个编码(唯一),每个字符由固定宽度的inbits(统一)表示。

查询百度百科,它的介绍是这样的:

统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

推荐看这篇文章:https://zhuanlan.zhihu.com/p/195497699

有兴趣想深入了解的话可以看看这个:https://home.unicode.org/

Unicode 是一种字符编码规范,而 UTF-8、UTF-16 等都是具体的实现,UTF-8 在如今被广泛使用。

我们常见的多是 UTF-8,Unix/Linux 的默认编码方案。UTF-8 编码方案之所以被广泛使用,是因为多种语言的文字和各种类型的符号可以混合在同一信息中,而不必像 UTF-16 或 UTF-32 那样为每个字符预留多个字节。在 UTF-8 中,如果只需要 ASCII 文本,则每个字符使用一个字节,高阶位设置为 0;如果非 ASCII 字符需要一个以上的字节,则由字节的高阶 1 位决定使用多少个字节。


本站由 江湖浪子 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。