У модели пользователя есть 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?
Пожалуйста, помогите
Вы можете использовать это
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
Чтобы установить TimeZone, вам нужно использовать
Time.zone= @user.time_zone
Вы можете установить это в: before_filter в application.rb
application.rb
OTOH, вы можете использовать метод use_zone сблок
use_zone
Time.use_zone(@user.time_zone) do #.... This code will run as if you were in @user.time_zone end
Идеальный способ справиться со временем - сохранить данные в формате UTC на заднем плане, это упростит процесс преобразования.
Как упоминал выше Чандра Патни, вы можете использовать эти методы для преобразования.
Для отображения объекта времени в отформатированной строке вы можете использовать метод rails strftime, http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime
Попробуйте что-то вроде этого в вашем контроллере пользователя:
def show @user = find(params[:id]) Time.zone = @user.time_zone end
Чтобы изменить формат:
Time.now.strftime("at %I:%M%p")