Форматирование даты и времени в Rails - PullRequest
0 голосов
/ 01 мая 2018

Итак, мое приложение rails поддерживает разные часовые пояса и устанавливает часовой пояс для каждого запроса следующим образом:

def set_current_time_zone
  Time.zone = current_user.time_zone
end

Вся моя работа по форматированию и созданию отчетов для всего сайта, за исключением селектора времени и даты jQuery.

Форма отправляет время начала в формате 04/20/2018 5:23 AM. Когда я анализирую время с кодом ниже, я получаю следующий вывод.

# this is the value of params[:job][:start] 04/20/2018 5:23 AM

job.start = DateTime.strptime(params[:job][:start],"%m/%d/%Y %H:%M %p")

#printing job.start outputs this: 2018-04-20 00:23:00 -0500

Как вы заметили, часовой пояс был применен ко времени и сейчас является неподходящим. Как мне исправить это?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Добавьте еще несколько деталей к моему последнему комментарию выше.

Я сделал это в консоли rails, моя модель Shift и имеет start_time: datetime.

2.1.3 :022 > time = "04/02/2018 5:23 AM"                                                          
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :023 > Time.zone = "Singapore"                                                              
 => "Singapore"                                                                                   
2.1.3 :024 > shift.start_at = time                                                                
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :025 > shift.save                                                                           
   (0.1ms)  begin transaction                                                                     
  SQL (0.5ms)  UPDATE "shifts" SET "start_at" = ?, "updated_at" = ? WHERE "shifts"."id" = 2  [["st
art_at", "2018-02-03 21:23:00.000000"], ["updated_at", "2018-05-02 05:43:38.527338"]]             
   (1.4ms)  commit transaction                                                                    
 => true                                                                                          
2.1.3 :026 > Time.zone = "Dublin"                                                                 
 => "Dublin"                                                                                      
2.1.3 :027 > shift.start_at = time                                                                
 => "04/02/2018 5:23 AM"                                                                          
2.1.3 :028 > shift.save                                                                           
   (0.2ms)  begin transaction                                                                     
  SQL (0.4ms)  UPDATE "shifts" SET "start_at" = ?, "updated_at" = ? WHERE "shifts"."id" = 2  [["st
art_at", "2018-02-04 05:23:00.000000"], ["updated_at", "2018-05-02 05:45:44.638291"]]             
   (1.4ms)  commit transaction                                                                    
 => true                      

См. Данные внутри SQL.

0 голосов
/ 01 мая 2018

Имейте в виду, DateTime.strptime('04/20/2018 5:23 AM',"%m/%d/%Y %H:%M %p") вернет значение в UTC =>Fri, 20 Apr 2018 05:23:00 +0000

Однако, если вы сохраните это значение, скажем, в поле базы данных, в активном объекте записи, он выведет значение часового пояса в любое значение, которое вы установили в Time.zone

Возможно, это не полный ответ, но может привести вас в правильном направлении.

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