Конвертировать время в другой часовой пояс

У меня есть строка даты в этом формате гггг-мм-ддчч: мм: сс [Z]

И у меня есть строка часового пояса. например, "Азия / Калькутта"

Теперь я хочу преобразовать эту строку даты в часовой пояс данного часового пояса

например, если дата 2014-01-03T23:30:00Z, то в часовом поясе "Азия / Калькутта" это будет 2014-01-04T05:00:00 .

Я пытался использовать библиотеку времени, но у библиотеки времени, похоже, нет никакого метода, который мог бы конвертировать в другой тимзон http://ruby-doc.org/core-1.8.6/Time.html.

2 ответа

Вы должны использовать драгоценный камень TZInfo.

require 'tzinfo'

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

Если это просто проект 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)"')

Другие вопросы по тегам