Ruby 将时间转换为其他时区

Ruby 将时间转换为其他时区,ruby,timezone,ruby-1.8,Ruby,Timezone,Ruby 1.8,我有一个这种格式的日期字符串 yyyy-mm-ddThh:mm:ss[Z] 我有一个时区字符串。例如“亚洲/加尔各答” 现在我想把这个日期字符串转换成给定时区的时区 例如,如果日期为2014-01-03T23:30:00Z,则在“亚洲/加尔各答”时区中,日期为2014-01-04T05:00:00 我尝试使用时间库,但时间库似乎没有任何方法可以转换为其他时区。您应该使用gem 需要“tzinfo” tz=TZInfo::Timezone.get('Asia/Kolkata') utc=日期时间i

我有一个这种格式的日期字符串 yyyy-mm-ddThh:mm:ss[Z]

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

现在我想把这个日期字符串转换成给定时区的时区

例如,如果日期为2014-01-03T23:30:00Z,则在“亚洲/加尔各答”时区中,日期为2014-01-04T05:00:00

我尝试使用时间库,但时间库似乎没有任何方法可以转换为其他时区。

您应该使用gem

需要“tzinfo”
tz=TZInfo::Timezone.get('Asia/Kolkata')
utc=日期时间iso8601('2014-01-03T23:30:00Z')
本地=tz.utc到本地(utc)

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

  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\u time\u to\u timezone(time.now,“+11:00”)
它将返回如下内容

2017-05-31 18:17:13 +1100

如果它安装了rails,那么您可以直接调用时区中的
(“中央时间(美国和加拿大)”)

tzinfo是否与ruby 1.8和rails 2.3兼容。我尝试使用这个gem,但它显示了一条错误消息“没有要加载的文件--tzinfo”