首页 > 解决方案 > DateTime -> set_time_zone(...) 使用世界时区字符串,用于丢失的城镇

问题描述

我为用户构建了一个时区列表,他们可以选择从他们居住的地方设置他们的数据库应用程序。我的问题不是全部列出,即“美国/芝加哥”在列表中,但没有“美国/休斯顿”,没有“美国/德克萨斯/休斯顿”与芝加哥相同的区域。但是“America/Texas/El_Paso”也不在列表中,不同的区域,所以用户可以选择。

我的问题是这可以从 CPAN 提供的库之外添加到 DateTime 缺少的城市和地区作为字符串吗?有没有人设法做到这一点以及如何做到这一点?

场景是您在当地时区创建记录,但也将一些记录发送到另一个国家。然后观察/处理他们转换为当地时区。即收到的记录是凌晨 2 点,在另一个国家是下午 5 点,前一天。您希望日期时间中的国家/地区日期戳,转换为存储或转换为对象。由于各种原因。

标签: perldatetimetimezone

解决方案


America/ChicagoIANA 时区数据库标识符。它在许多不同的操作系统、平台、语言和框架中得到认可。您不应该尝试添加自己的标识符,例如America/Texas/Houston,因为它们只会在您的应用程序中有意义。如果您曾经将其发送到其他任何地方,那将毫无意义。您可以制作自己的城市列表并将它们映射到特定的时区,但不要尝试创建新的时区。

在时区数据库中,时区标识符的名称中使用了城市——但并非世界上的每个城市都有一个标识符。这是设计使然。您可以在时区数据库本身中包含的 tz 代码和数据的理论和语用学中阅读有关选择时区标识符的原因和方式的更多信息。


推荐阅读