Сохранить и показать точное местное время (CST)? - PullRequest
2 голосов
/ 29 октября 2019

UTC Time Display

Я работаю над приложением (приложение для учебного класса), которое в настоящее время сохраняет и отображает время начала учебного класса в формате UTC.

Миграция

class CreateTrainingClasses < ActiveRecord::Migration[5.2]
  def change
    create_table :training_classes do |t|
      t.datetime :starts_at
    end
  end
end

Выбор даты и времени

Отображение даты и времени

Отображение местного времени (сбой)

Однако я хочу сохранить и отобразить местное время (CST). Я обновил поле формы выбора даты и времени для отображения желаемого местного времени.

<%= form.label :starts_at %>
<p><%= form.datetime_select :starts_at, default: Time.now.in_time_zone("Central Time (US & Canada)"), ampm: true %></p>

enter image description here

И я обновил отображение, чтобы показатьместное время. Однако теперь он показывает неправильное время - даже когда я создаю новый учебный класс.

<td><%= training_class.starts_at.in_time_zone("Central Time (US & Canada)").strftime("%B %d, %Y %I:%M %p") %></td>

enter image description here

Вопрос

Как сохранить и отобразить правильное местное время для формы и отображения класса?

Ссылки

Ответы [ 2 ]

3 голосов
/ 29 октября 2019

Вам необходимо установить time_zone в application.rb

config.time_zone = 'Central Time (US & Canada)'

Затем перезапустить сервер

Ссылка: https://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

0 голосов
/ 29 октября 2019

Я бы сказал, что нет. Я не знаю синтаксис Ruby, но почему бы не сохранить данные часового пояса с самим временем? Вот как это реализовано в SQL Server для сравнения:

"Структура DateTimeOffset представляет значение даты и времени вместе со смещением, которое указывает, насколько это значение отличается от UTC. Таким образом, значение всегда однозначно определяетодин момент времени. "

https://docs.microsoft.com/en-us/dotnet/standard/datetime/choosing-between-datetime#the-datetimeoffset-structure

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