Rails хранит поля DateTime в UTC, но не помечает их часовой пояс как UTC.Это соответствует типу timestamp without time zone
в postgres.Поэтому, если ваш часовой пояс равен +2, он будет хранить время как UTC (+0).
В Rails Time.zone
вернет текущий местный часовой пояс (вы можете добавить логику, чтобы изменить это пользователем, например).При сохранении даты и времени Rails автоматически преобразует текущий часовой пояс в UTC.Однако он не использует тип Postgres, который на самом деле включает данные о часовом поясе, поэтому он полагается на соглашение о преобразовании туда и обратно в часовой пояс пользователя.
Если вы действительно заботитесь только о дате, используйтетип даты в вашей миграции вместо Timestamp или DateTime.
Времена и даты имеют множество тонких причуд, и «правильное» поведение зависит от вашего варианта использования.В некоторых приложениях вам нужно иметь дело с «местным» временем при рассмотрении переходов даты, а иногда вам нужно изощрять логику вашего приложения или базы данных, чтобы думать в терминах местного времени, а иногда вам небезразлично время UTC.