Lidar com fusos horários e análise de strings pode ser uma dor. Aproveitar o ActiveSupport torna as coisas um pouco mais previsíveis. Veja se você consegue identificar a diferença.
require "active_support/all"
value = "2016-10-01"
Time.parse(value).utc
# 2016-10-01 06:00:00 UTC
ActiveSupport::TimeZone["UTC"].parse(value).to_time.utc
# 2016-10-01 00:00:00 UTC
Este exemplo foi executado em uma máquina usando Mountain Time.