2010-04-08 2 views
0

В моем приложении мне нужно установить переменную, чтобы время начала составляло 9:00 утра по месту, где бы ни находился пользователь.Как я могу получить значение для времени в 9:00 местного, независимо от часового пояса?

У меня есть переменная часового пояса для каждого пользователя, и сохранение и извлечение все работают. Но мне нужно установить переменную, когда я создаю новое событие в 9:00 утра в локальном часовом поясе пользователя.

В моем текущем методе используется локальное время сервера, а затем производится настройка для часового пояса отдельного пользователя. Я не знаю, чего не знаю. Есть ли команда для создания значения «Сегодняшняя дата в 9:00 утра, где вы находитесь»?

Мой текущий код:

t = Time.now.to_date.beginning_of_day + 11.hours 

(заставляя 2 часа смещение между моим основным пользователем и сервером в другом часовом поясе).

ответ

0

Ruby имеет класс времени, который отображает класс времени в большинстве баз данных. В большинстве баз данных, включая mysql, он представлен как HH:mm:ss, поэтому часть даты игнорируется.

Время должно всегда оставаться неизменным (09:00), если оно не изменено извне. Вы можете получить эти компоненты времени с помощью t.hour и t.min и построить объект Date с правильной датой/временем и отрегулировать часовой пояс пользователей.

>> t = Time.parse("09:00") 
=> 2010-04-07 09:00:00 -0700 
>> t.hour 
=> 9 
>> t.min 
=> 0 
+0

Этот метод работал. Благодарю. Я закончил с: t = Time.parse («09:00») start_time = Time.now.beginning_of_day + t.hour.hours – ander163

1

Считаете ли вы, что Ruby Timezone Library (TZInfo)? Это DST-осведомленный и более сфокусированный, чем Rails' built-in TimeZone class.

Вам нужно будет использовать свои знания часового пояса пользователя. Простой пример здесь:

require 'tzinfo' 
tz = TZInfo::Timezone.get('America/New_York') 
local = tz.utc_to_local(Time.utc(2010,4,8,9,0,0)) 

Таким образом, местное время 9:00 утра в EST/EDT выражается в 05:00 UTC.

irb(main):004:0> local.hour 
=> 5 
Смежные вопросы