Часовой пояс к текущему времени - PullRequest
0 голосов
/ 21 сентября 2011

У модели пользователя есть time_zone, в котором хранится «Pacific Time (США и Канада)».

Сценарий: 1. Current_user живет в часовом поясе Японии 2. Current_user просматривает профиль Джона, который живет в «Pacific Time»(США и Канада) "3. В профиле Джона мне нужно показать местное время в" Тихоокеанском времени (США и Канада) "как 10:01 утра

Что я сделал?ActiveSupport :: TimeZone.new (@ user.time_zone) .now возвращает что-то вроде 2011-09-21 10:01:56 UTC

Вопросы: 1. Как мне преобразовать это в 10:01?2. Почему это UTC?

Пожалуйста, помогите

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

Вы можете использовать это

Time.zone = 'Pacific Time (US & Canada)'

, чтобы получить местное время

Time.zone.now      #=> Wed, 21 Sep 2011 02:25:08 PDT -07:00

, чтобы получить 10:00 утра / вечера

Time.zone.now.strftime("%I:%M %p")   #=> 02:25 AM 
1 голос
/ 21 сентября 2011

Чтобы установить TimeZone, вам нужно использовать

Time.zone= @user.time_zone

Вы можете установить это в: before_filter в application.rb

OTOH, вы можете использовать метод use_zone сблок

Time.use_zone(@user.time_zone) do
  #.... This code will run as if you were in @user.time_zone
end
0 голосов
/ 21 сентября 2011

Идеальный способ справиться со временем - сохранить данные в формате UTC на заднем плане, это упростит процесс преобразования.

Как упоминал выше Чандра Патни, вы можете использовать эти методы для преобразования.

Для отображения объекта времени в отформатированной строке вы можете использовать метод rails strftime, http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

0 голосов
/ 21 сентября 2011

Попробуйте что-то вроде этого в вашем контроллере пользователя:

def show
  @user = find(params[:id])
  Time.zone = @user.time_zone
end

Чтобы изменить формат:

 Time.now.strftime("at %I:%M%p") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...