2010-07-16 36 views
1

我正在开发一个php(codeigniter)项目。我在时区中进行了大量工作,以便在不同时区和服务器时区之间转换时间。将时区标识符转换为名称? (亚洲/加尔各答至印度标准时间)

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

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

编辑:作为一个人谁回答指出,缩写可能是不明确的..但时区标识符不是。那么我可以直接将“Asia/Calcutta”转换为“Indian Standard Time”吗?有没有含糊之处..

回答

1

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

是的,(几乎)没有歧义。几乎因为时区标识符也可能映射到若干缩写,取决于夏时制和政治变化。在PHP中,你可以用DateTimeZone::listAbbreviations()(但这个不是很可靠,因为它显示自tzdb破晓以来所用的所有缩写)或DateTimeZone::getTransitions()--这个更好,因为如果你向后遍历数组并返回第一个不遵守DST的转换abbr

5

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

例子:

  • CDT:中部夏令时间(美国/坎昆,美国/芝加哥,...)
  • CDT:墨西哥中部夏令时(美国)
  • CDT:古巴中部夏令时间(美国)
  • CDT:加拿大中部夏令时间(美国)

即使IST不是唯一的:

  • IST:爱尔兰夏令时间(欧洲)
  • IST:印度标准时间(亚洲)
  • IST:以色列标准时间(而不是在ZIC)

有,但是,有几个启发式。例如,PostgreSQL带有几个时区设置,您可以根据目标受众的大陆进行交换。

+0

啊......我不知道这件事。如果是这样,你知道如何将亚洲/加尔各答等时区标识符转换为印度标准时间吗?那里没有歧义.. – Munim 2010-07-16 12:30:16

+0

@Munim我不知道你是否可以用PHP来做到这一点。似乎没有办法格式化日期以获取时区缩写(最接近的是“tz”格式化程序,但如果可能的话,这将会给出完整的时区)。 – Artefacto 2010-07-16 12:35:22

+0

如果数据不存在于任何php函数中,我愿意使用Web服务。 – Munim 2010-07-16 12:40:10

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规范。

+0

阅读我的最新编辑。我改变了这个问题。我仍然在寻找将时区标识符(这是唯一的)直接转换为扩展的解决方案。没有歧义。 – Munim 2010-07-16 12:35:46

+0

仍然有一个问题,扩展不是标准的,但你可以通过查找tzdatabase获得大部分你想要的东西。以下是一个链接:http://code.google.com/p/tzdata/ – bluesmoon 2010-07-16 20:08:02

0

马爷你应该看看这个PHP函数timezone_name_from_abbr()

相关问题