仍然对时区和转换感到困惑

时间:2011-08-15 10:30:24

标签: ruby-on-rails-3 timezone

我会收集用户时区以及他们想要在该时区内投放内容的时间。

我的应用程序将使用曼谷时间。

application.rb中

 config.time_zone = 'Bangkok'  

我想存储用户相对于我的时区输入的时间。

例如,用户选择以下内容:

time = "6:00"
timezone = "(GMT-10:00) Hawaii"

我想将此时间转换为我的应用程序时间并将其保存在数据库中。

如何将夏令时的6AM时区转换为曼谷的时间?

1 个答案:

答案 0 :(得分:3)

让我们用你的例子来证明:

config.time_zone = 'Bangkok'
time = "6:00"
timezone = "Hawaii"

您需要做的第一件事是将应用的时区设置为用户选择的时区:

Time.zone = "Hawaii"

然后使用此新时区来解析时间:

hawaii_time = Time.zone.parse("6:00")

如果我们现在打印出hawaii_time,我们会得到类似的东西(我们有HST -10:00,这意味着它是正确的):

Mon, 15 Aug 2011 06:00:00 HST -10:00

现在,您可以使用rails in_time_zone方法转换为应用的时区:

local_time = hawaii_time.in_time_zone(Rails.configuration.time_zone)

如果我们打印出local_time,我们会得到类似的东西(我们有ICT +07:00这对曼谷来说是正确的):

Mon, 15 Aug 2011 23:00:00 ICT +07:00

我们现在可以将应用的时区重置为原始值:

Time.zone = Rails.configuration.time_zone