2011-03-30 3 views

ответ

23
require 'time' 

p Time.zone_offset('EST') #=> -18000 #(-5*60*60) 
+10

Time.zone.utc_offset сохранен мой день =) –

+1

Не забывайте, что для правильной работы вам необходимо установить 'config.time_zone = 'Berlin'' и' config.active_record.default_timezone =' Berlin'' в application.rb (в моем случае, без этого он не учитывал корректировки дневного света правильно) – weltschmerz

+1

Знайте об этом: https://github.com/rails/rails/issues/7297 – Valentin

5

Если у вас есть объект ActiveSupport::TimeWithZone, вы можете позвонить ему time_zone.utc_offset. Так, например, Time.zone.now.time_zone.utc_offset.

EDIT: Вы также можете использовать метод экземпляра gmt_offset для обычных объектов Time.

9
my_date_time = DateTime.new(2011, 3, 29, 20) 
#=> Tue, 29 Mar 2011 20:00:00 +0000 

#will return the same time but with another offset 
my_date_time.change(:offset => "+0100") 
#=> Tue, 29 Mar 2011 20:00:00 +0100 

#will return time for other offset 
my_date_time.in_time_zone(-1) 
#=> Tue, 29 Mar 2011 19:00:00 -0100 
+0

Это то, что я хотел, в первую очередь, -N смещение! –

2

Просто, чтобы завершить цикл здесь, прямо сейчас я использую:

@course.start.utc_offset/60/60 для того, чтобы получить # часов необходимо. Обратный отсчет Jquery нуждается только в -5 или +3 в аргументе timezone.

Ваш приветственный google.

15

Если вам нужно принять летнее время во внимание, вы можете использовать что-то вроде этого:

Time.now.in_time_zone('America/New_York').utc_offset 
+0

Спасибо. Это привело меня к правильному смещению, когда 'Time.zone.utc_offset' не сделал. –

+0

Не работает на ruby ​​2.1.8 ... –

+0

@GregDubicki Это в «Rails» ActiveSupport :: TimeWithZone' – Dorian

4

Если вы храните часовой пояс пользователя в качестве Time.zone.name строки, такого как 'Eastern Time (US & Canada)', как указано в http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html и хотите получить смещение часового пояса вы можете сделать это:

ActiveSupport::TimeZone.new(user.time_zone).utc_offset/3600 
# => -5 
3

Я использую Time.zone.utc_offset/1.hour, чтобы получить смещение в часах (например: -8 в Сан-Франциско)

Смежные вопросы