Как изменить зону смещения на некоторое время в Ruby On Rails? - PullRequest
24 голосов
/ 26 июня 2009

У меня есть переменная foo, которая содержит время, скажем, 4 часа дня сегодня, но смещение зоны неправильное, то есть оно находится в неправильном часовом поясе. Как мне изменить часовой пояс?

Когда я печатаю его, я получаю

Fri Jun 26 07:00:00 UTC 2009

То есть смещения нет, и я хотел бы установить смещение на -4 или восточное стандартное время.

Я ожидал бы, что смогу просто установить смещение как свойство объекта Time, но это, по-видимому, недоступно?

Ответы [ 12 ]

0 голосов
/ 31 декабря 2014

Это то, что я сделал, так как я не использую Rails и не хочу использовать неосновные гемы.

t = Time.now # my local time - which is GMT
zone_offset = 3600 # offset for CET - which is my target time zone
zone_offset += 3600 if t.dst? # an extra hour offset in summer
time_cet = Time.mktime(t.sec, t.min, t.hour, t.mday, t.mon, t.year, nil, nil, t.dst?, zone_offset)
0 голосов
/ 02 декабря 2013

Вариант 1

Использовать date_time_attribute gem :

my_date_time = DateTimeAttribute::Container.new(Time.zone.now)
my_date_time.date_time           # => 2001-02-03 22:00:00 KRAT +0700
my_date_time.time_zone = 'Moscow'
my_date_time.date_time           # => 2001-02-03 22:00:00 MSK +0400

Вариант 2

Если время используется в качестве атрибута, вы можете использовать тот же самый date_time_attribute gem :

class Task
  include DateTimeAttribute
  date_time_attribute :due_at
end

task = Task.new
task.due_at_time_zone = 'Moscow'
task.due_at                      # => Mon, 03 Feb 2013 22:00:00 MSK +04:00
task.due_at_time_zone = 'London'
task.due_at                      # => Mon, 03 Feb 2013 22:00:00 GMT +00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...