Сохранение часовых поясов в Rails - PullRequest
3 голосов
/ 22 июня 2011

Если у меня есть строка времени вида "Wed, 22 Jun 2011 09:43:58 +0200", полученная от клиента, я хочу сохранить ее с сохранением часового пояса. Это важно, потому что важно не только абсолютное время UTC, но и часовой пояс.

Time.zone.parse(t) преобразует время во все зоны, которые Time.zone использует в данный момент, теряя часовой пояс источника.

Нужно ли вручную извлекать часовой пояс из приведенной выше строки или есть идиоматический способ сделать это?

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Поле DateTime может хранить только «ГГГГ-ММ-ДД ЧЧ: ММ: СС» ( MySQL ), без информации о часовом поясе.

Вы должны хранить дату и время в формате UTC, а часовой пояс - в другом поле, предпочтительно в виде целого числа, указывающего смещение от времени UTC в минутах.

Вы можете извлечь смещение следующим образом:

ruby-1.9.2-p180:001:0>> require 'active_support/all' # included by Rails by default
# => true
ruby-1.9.2-p180:002:0>> dt = DateTime.parse "Wed, 22 Jun 2011 09:43:58 +0200"
# => Wed, 22 Jun 2011 09:43:58 +0200
ruby-1.9.2-p180:003:0>> dt.utc_offset
# => 7200
ruby-1.9.2-p180:004:0>> dt.utc
# => Wed, 22 Jun 2011 07:43:58 +0000

EDIT:

и в оба конца упражнение

ruby-1.9.2-p180 :039 > u.utc.new_offset(u.offset)
=> Wed, 22 Jun 2011 09:43:58 +0500 
ruby-1.9.2-p180 :040 > u
=> Wed, 22 Jun 2011 09:43:58 +0500 
1 голос
/ 17 мая 2012

Я думаю, что вы ищете следующее решение:

В ApplicationController:

before_filter :get_tz

def get_tz
  @tz = current_user.time_zone
end

def use_tz
  Time.use_zone @tz do
    yield
  end
end

А в контроллере добавь вокруг фильтра в начале

around_filter :use_tz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...