Как мне получить значение времени в 9:00 по местному времени, независимо от часового пояса? - PullRequest
0 голосов
/ 08 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

Рассматривали ли вы Ruby Timezone Library (TZInfo) ? Он поддерживает DST и более понятен, чем встроенный в TimeZone класс Rails .

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

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
0 голосов
/ 08 апреля 2010

В 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
...