我们有一个基于 PHP 构建的应用程序。在应用程序中,我们提供了选择适当时区的选项,并且对于每个时区,我们在数据库中存储了相关的 php 时区标识符(如此处指定)。
现在我们正在将与该应用程序相关的所有后端进程迁移到 Ruby,但我们现在面临的问题是如何处理时区,因为它们以 php 格式存储。如何在红宝石中使用它们?是否有库/宝石可以将 php 时区格式转换为 ruby ?有没有类似 php 的 date_default_timezone_set 方法?
正如 Andrew 建议的那样,最好的选择是尽可能完全摆脱 PHP 时区。下一个最好的事情是创建一个从 PHP 区域到类似ActiveSupport
区域名称的映射。
您可以使用它来帮助您进行映射:
http ://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
对于那些在 PHP 之间不直接匹配的映射,ActiveSupport::TimeZone
您必须手动创建映射。然而,PHP 规范中的区域并不多,因此正确的映射不应该是太多的工作。
编辑
您可以ActiveSupport
单独包含到任何 Ruby 应用程序中。您甚至可以单独安装 gem ( gem install activesupport
)。您不需要 Rails 应用程序就可以使用它。
但是,如果您想使用类似但与 Rails 无关的东西,您可以查看该TZInfo
库:
http://tzinfo.rubyforge.org/
http://tzinfo.rubyforge.org/doc/
没有标准的解决方案可以在 PHP 时区和 Ruby 时区之间进行转换。如果您正在迁移到 Ruby,那么开始将所有内容转换为TZInfo
-type 数据。