我通过以下代码枚举了Android 12上的所有可用时区:
String[] ids = TimeZone.getAvailableIDs();发现in从"Etc/GMT+12“到"Etc/GMT-14”,但实际上它们等于"GMT-12“和"GMT+14”。例如,"Etc/GMT-7“等于"GMT+7”。
为什么Android会使用否定的名字?
发布于 2022-11-22 14:04:45
这些名字是由IANA时区数据库提供的,它是安卓时区实现的基础。
数据库有引用这些名称/定义的以下评论:
与区域名称中的POSIX TZ设置保持一致,即使这与许多人期望的相反。POSIX在格林威治西部有积极的迹象,但许多人期望格林威治以东有积极的迹象。例如,TZ='Etc/GMT+4‘使用缩写"-04“,对应于UT后4小时(即格林威治以西),尽管许多人预计这意味着比UT早4小时(即格林威治以东)。
所以IANA这样做,因为POSIX是这样做的。是
偏移 ..。 分钟(mm)和秒(ss)是可选的。小时(hh)须予规定,并可为一位数字。应要求使用以下的偏移量。如果在dst之后没有偏移,则假定替代时间比标准时间提前一小时。可以使用一个或多个数字;该值总是被解释为十进制数。时间在0到24之间,分钟(和秒)-if在0到59之间。未指定在此范围之外使用值的结果。如果前面有“-”,则时区应位于主子午线以东;否则,时区应为西(可选前面的“+”)。
(重点由我补充)
请注意,POSIX并不是自洽的。strftime
Z 替换为国际标准化组织8601:2000标准格式( +hhmm或-hhmm )中来自UTC的偏移量,如果不确定时区,则不使用字符。例如,"-0430“是指在格林威治以西的世界协调时间( UTC )之后4小时30分钟。
https://stackoverflow.com/questions/74532154
复制相似问题