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

Php 将时区标识符转换为名称?(亚洲/加尔各答至印度标准时间),php,timezone,Php,Timezone,我正在从事一个php(codeigniter)项目。我在时区中做了很多工作来转换不同时区和服务器时区之间的时间 我知道如何将php时区标识符转换为其缩写(如Asia/Calcutta转换为IST)。但是现在,我需要扩展这个缩写(印度标准时间) 在php代码或任何Web服务中是否有任何方法可以实现这一点?这是我完全掌握时区编程的最后一步!:) 编辑:正如一位回答问题的人指出的那样,缩写词可能会模棱两可。。但时区标识符并非如此。那么,我可以直接将“亚洲/加尔各答”转换为“印度标准时间”吗?这里没有含

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

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

在php代码或任何Web服务中是否有任何方法可以实现这一点?这是我完全掌握时区编程的最后一步!:)


编辑:正如一位回答问题的人指出的那样,缩写词可能会模棱两可。。但时区标识符并非如此。那么,我可以直接将“亚洲/加尔各答”转换为“印度标准时间”吗?这里没有含糊不清的地方。

一般来说,你不能这样做,因为它是含糊不清的——相同的缩写用于不同的时区

例如:

  • 中央夏令时(美国/坎昆,美国/芝加哥,…)
  • 墨西哥中部夏时制(美国)
  • 古巴中央夏令时(美洲)
  • 加拿大中央夏令时(美国)
即使是IST也不是唯一的:

  • IST:爱尔兰夏季(欧洲)
  • IST:印度标准时间(亚洲)
  • IST:以色列标准时间(非zic)

然而,有几种启发式方法。例如,PostgreSQL附带了几个时区集,您可以根据目标受众所在的大陆进行交换。

一般来说,您不能这样做,因为它模棱两可——相同的缩写用于不同的时区

例如:

  • 中央夏令时(美国/坎昆,美国/芝加哥,…)
  • 墨西哥中部夏时制(美国)
  • 古巴中央夏令时(美洲)
  • 加拿大中央夏令时(美国)
即使是IST也不是唯一的:

  • IST:爱尔兰夏季(欧洲)
  • IST:印度标准时间(亚洲)
  • IST:以色列标准时间(非zic)

然而,有几种启发式方法。例如,PostgreSQL附带了多个时区集,您可以根据目标受众的地域进行交换。

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

类似地,
CST
Central Standard Time
Central Summer Time
并映射到以下3个偏移:
UTC+9:30
UTC-6
UTC+10:30

上面提到的IST也是爱尔兰夏季时间,映射到UTC+1


所以,回答你的问题,不,你不能这么做。如果你真的想精通时区编程,请仔细阅读ISO规范。

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

类似地,
CST
Central Standard Time
Central Summer Time
并映射到以下3个偏移:
UTC+9:30
UTC-6
UTC+10:30

上面提到的IST也是爱尔兰夏季时间,映射到UTC+1


所以,回答你的问题,不,你不能这么做。如果您真的想精通时区编程,请阅读ISO规范。

也许您应该从\u abbr()中查看此php函数timezone\u name\u

也许您应该从\u abbr()中查看此php函数timezone\u name\u


@Munim:啊。。。我不知道这件事。如果是这样的话,你认为呢 知道如何将亚洲/加尔各答等时区标识符转换为印度 标准时间?没有含糊不清的地方

是的,(几乎)一点也不含糊。几乎是因为时区标识符也可能映射到几个缩写,这取决于夏令时和政治变化。在PHP中,您可以使用
DateTimeZone::ListAbstraints()
(但这个不是很可靠,因为它显示了tzdb诞生以来使用的所有缩写)或
DateTimeZone::getTransitions()
-这一个更好,因为如果您向后遍历数组并返回第一个未观察DST的转换
abbr


@Munim:啊。。。我不知道这件事。如果是这样的话,你认为呢 知道如何将亚洲/加尔各答等时区标识符转换为印度 标准时间?没有含糊不清的地方


是的,(几乎)一点也不含糊。几乎是因为时区标识符也可能映射到几个缩写,这取决于夏令时和政治变化。在PHP中,您可以使用
DateTimeZone::ListAbstraints()
(但这个不是很可靠,因为它显示了tzdb诞生以来使用的所有缩写)或
DateTimeZone::getTransitions()
-这一个更好,因为如果您向后遍历数组并返回第一个未观察DST的转换
abbr

啊。。。我不知道这件事。如果是这样,您知道如何将亚洲/加尔各答等时区标识符转换为印度标准时间吗?没有含糊不清的地方。@Munim我不知道你是否可以用PHP来做。似乎没有办法格式化日期以获得时区缩写(最接近的是“tz”格式化程序,但这将给出完整的时区)