Конвертировать время в другой часовой пояс
У меня есть строка даты в этом формате гггг-мм-ддчч: мм: сс [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)"')