将时区标识符转换为名称? (亚洲/加尔各答到印度标准时间)

时间:2010-07-16 12:22:17

标签: php timezone

我正在开发一个php(codeigniter)项目。我在时区做了很多工作来转换不同时区和服务器时区之间的时间。

我知道如何将php时区标识符转换为其缩写(如Asia / Calcutta to IST)。但是现在,我需要扩展这个缩写(印度标准时间)。

有什么方法可以在php代码或任何web服务中进行转换吗?这是我完全掌握时区编程的最后一步! :)

编辑:正如一位回答者所指出的,缩写可能含糊不清......但时区标识符并非如此。那么我可以直接将“亚洲/加尔各答”转换为“印度标准时间”吗?这没有任何含糊之处..

4 个答案:

答案 0 :(得分:5)

一般情况下,你不能这样做,因为它不明确 - 相同的缩写用于不同的时区。

示例:

  • CDT:Central Daylight Time(America / Cancun,America / Chicago,...)
  • CDT:墨西哥中部夏令时(美国)
  • CDT:古巴中部夏令时(美国)
  • CDT:加拿大中部夏令时(美国)

即使是IST也不是唯一的:

  • IST:爱尔兰夏令时(欧洲)
  • IST:印度标准时间(亚洲)
  • IST:以色列标准时间(不是zic)
然而,有一些启发式方法。例如,PostgreSQL附带了几个时区集,您可以根据目标受众的大陆进行交换。

答案 1 :(得分:1)

时区缩写,时区偏移和时区扩展之间没有一对一的映射关系。例如,CDT代表Central Daylight Time,它映射到UTC+10:30(澳大利亚)和UTC-5(北美)。它具有相同的缩写,但映射到不同的大陆和时间偏移。

同样,CSTCentral Standard TimeCentral Summer Time,并映射到以下3个偏移:UTC+9:30UTC-6UTC+10:30

您在上面提及的

IST也是Irish Summer Time并映射到UTC+1

所以,回答你的问题,不,你不能这样做。如果您真的想要掌握时区编程,请阅读相同的ISO规范。

答案 2 :(得分:1)

  

@Munim :啊......我不知道这件事。如果是这样的话,你呢?   知道如何将亚洲/加尔各答这样的时区标识符转换为印度语   标准时间?那里没有歧义..

是的,(几乎)根本没有歧义。几乎是因为根据夏令时和政治变化,时区标识符也可能映射到几个缩写。在PHP中,您可以使用DateTimeZone::listAbbreviations()(但这个不是非常可靠,因为它显示自tzdb开始以来使用的所有缩写)或DateTimeZone::getTransitions() - 这个更好,因为如果你向后遍历数组并返回未观察DST的第一个转换abbr

答案 3 :(得分:0)

Maye你应该看看这个php函数timezone_name_from_abbr()