国际化开发 - 时区知识

时区概念:

时区是地球上具有统一的法定标准时间的区域。由于区域的法律定义可能千差万别且经常更改,因此通常需要数据库或查找表才能正确应用时区规则。

时区数据库

目前通常使用两种不同的时区数据库:

1.Microsoft Windows时区数据库

由Microsoft维护

  • 在Windows平台实现。
  • Windows API获取本机时区key示例: "China Standard Time"

2.IANA /奥尔森时区数据库
也称为ZoneInfo,TZDB或TZ数据库,国际标准时区

  • 在Linux,Mac,IOS,Andorid,JavaScript,Java,PHP和许多其他平台上广泛实现。

  • Android,IOS,MAC, Web API获取本机时区key示例: "Asia/Shanghai"

时区信息

{
	"alias": ["Asia/Chongqing", "Asia/Chungking", "Asia/Harbin", "CTT", "PRC"],
	"offset": "480",
	"text": "中国时间",
	"id": "Asia/Shanghai",
	"desc": "(GMT+08:00) 中国标准时间 - 上海"
}

offset: 时区偏移量,即本地时间和UTC之间的时间差。单位:分钟
注意偏移并不都是整数小时,比如:(GMT+08:40) (GMT+09:30)

问题一:

比如Android,ios,MAC使用系统接口获取到id:Asia/Shanghai。
但是Windows平台获取到的id是"China Standard Time",与时区信息列表里面的id不同。

所以需要用Windows时区与国际时区的映射表来确认当前国际时区id统一与后台交互

问题二:

offset代表偏移的分钟数,时区偏移量,即本地时间和UTC之间的时间差,对于UTC,时区的东边是正值。
但是有些平台获取到的offset却是正负相反的。

注意,JavaScript、Python和C返回的是UTC和本地时间的差数。 Java、C#和Ruby返回的是本地时间和UTC的差数。

问题三:

有些时区的偏移是会变的。因为这些地区采用了 夏令时
夏令时是指某个时区在春季将时间向前移动(通常为一小时),然后在秋季向后移动的时间段。

  • 并非每个时区都会转换一小时。例如, Australia/Lord_Howe 时区仅偏移30分钟。
  • 世界各国政府经常改变夏令时的方式。不能假设当前规则过去总是适用或将来总是适用。

所以比较好的方案可能是从后台拉取时区列表,而后台要用脚本定期拉取国际标准时区信息进行变更。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值