将时间转换为其他时区

时间:2014-07-04 15:30:20

标签: ruby timezone ruby-1.8

我有这种格式的日期字符串 YYYY-MM-DDTHH:MM:SS [Z]

我有一个时区字符串。例如“亚洲/加尔各答”

现在我想将此日期字符串转换为给定时区的时区

例如如果日期是2014-01-03T23:30:00Z,那么在“亚洲/加尔各答”时区将是2014-01-04T05:00:00。

我尝试使用时间库,但时间库似乎没有任何方法可以转换为其他timzone http://ruby-doc.org/core-1.8.6/Time.html#method-c-mktime

2 个答案:

答案 0 :(得分:2)

您应该使用TZInfo gem。

require 'tzinfo'

tz = TZInfo::Timezone.get('Asia/Kolkata')
utc = DateTime.iso8601('2014-01-03T23:30:00Z')
local = tz.utc_to_local(utc)

答案 1 :(得分:0)

如果它只是一个没有rails的ruby项目,你也不想安装第三方宝石。 然后你必须自己做,以下是我做的:

  def convert_time_to_timezone(time, timezone)
    timezone_in_hours = timezone.to_i
    time_in_seconds = time.to_i
    time_in_seconds_in_timezone = time_in_seconds + timezone_in_hours*3600
    utc_time = Time.at(time_in_seconds_in_timezone).utc
    Time.new(utc_time.year, utc_time.month, utc_time.day, utc_time.hour, utc_time.min, utc_time.sec, "#{timezone}:00")
  end

只提供时间(例如,Time.now)和时区(例如," +11:00"或" -05:00") 它将返回指定时区的时间。 例: 致电convert_time_to_timezone(Time.now, "+11:00")它会返回类似

的内容
2017-05-31 18:17:13 +1100

如果已安装导轨,则可以直接拨打in_time_zone('"Central Time (US & Canada)"')