谈谈时区,日历,时间格式和国际化 - Anthony-黄亮

时间:2024-02-17 15:57:18

谈谈时区,日历,时间格式和国际化

国际化

不现国家和地区有不同的时间,表达习惯,程序需要尊重用户的这些习惯。这里我们谈谈国际化中时间的问题。

国际化的问题中的时间,不是一个单纯的问题,它包括时间的形式和内容。

时区

时间的内容是指时刻。在我们这个球形的星球上,每个地方的时间其实都参考当地太阳的位置,所以每个地方
的时间都是不一样的。为了生活的方便,大家约定一个区域使用同样的时刻,这个区域就是时区。时区不光与
地理位置相关,也与国家政治和生活习惯相关。根据地理位置,我们可以分为东一区,东二区,到东11区,以及
西一区,到西11区,还有两个特别的时区,零时区和东西12区。根据国家的政治和生活习惯,我们有北京时间,
美国的东海岸时间,中部时间,西部时间。比如说有些地方在夏天为了适合太阳早起,应把时间向前调整1小时,
这就是夏令时(Day ligth saving)。在南半球,同样的调整会出现在12月到3月之间,那是南半球的夏天。

国际上通行的时区表示法也很复杂,比如ISO8601中定义用UTC时间后加上±[hh]:[mm], ±[hh][mm], 或±[hh]
来表示当地时间,或者用Z来表示,UTC时间。注意mm出现的原因是夏令时可能不是整小时。事实上,并不是每年
都有夏令时,这属于日历的范畴。

还有以地区名和地区名的缩写来表示时区,如 "Dec 31, 1969 4:00:00 PM CST"。不过时区的缩写不唯一。
比如上面的CST,就可以是China Standard Time和Central Standard Time (North America)。
所以现在很少使用这个,不过也还是能看到。

另一种常用来表示时区,tz数库名称,它由洲/城市,例如Asia/Shanghai. 很多时间它是以图形化的形式给出。
这中表示法中,中国没有Asia/Beijing.而Asia/Chongqing和Asia/Shanghai是同意的。

时间的形式

我们最常见的时间形式包括:

Dec 31, 1969
Dec 31, 1969 4:00:00 PM
4:00:00 PM

当然,这不是中国的表达习惯,不过却是最通用的一种。

这里,月份的写法,逗号,顺序,时分秒之间的冒号,12/24小时制都是随用户的习惯变化的。

我们一般用“语言_国家“来表示一种国际化的语言习惯,包括字符范围,现金表达,数字表达,时间表达等。有时,这也不足
我们还可以增加一个变体的后缀。

日历

日历很复杂,但忽略一些细节,我们可以认为日历由很多个字段表示的时刻,日历与日历的不同只在于每个字段
的定义不同。常见的日历是由年,月,周数,周日,日,时,分,秒,毫秒的几项构成。我们只需要知道构成了
我们一般说的日期(时间),都是基于一个默认日历。