Вот почему вы всегда сохраняете время в UTC и отображаете его по местному времени пользователя, если это необходимо.Извините, что вам пришлось искать трудный путь!
Что вы можете сделать, это записать значения id
, в которых произошел переход, а затем отрегулировать все отметки времени до этого интервала с помощью CONVERT_TZ() метод в MySQL.
Это будет выглядеть примерно так для каждой таблицы:
# List of maximum ID to adjust
max_id = {
'examples' => 100,
}
c = ActiveRecord::Base.connection
c.tables.each do |table|
# Set your specific time-zones as required, PST used as an example here.
timestamp_updates = c.columns(table).select do |col|
col.type == :datetime
end.collect(&:name).collect do |col|
"`#{col}`=CONVERT_TZ(`#{col}`, 'PST', 'UTC')"
end
next if (timestamp_updates.empty?)
c.execute("UPDATE `#{table}` SET #{timestamp_updates.join(',') WHERE id<=%d" % max_id[table])
end