def round_time(time)
time = time.to_time.in_time_zone(time_zone) - day_start.seconds
time =
case field
when :second
time.change(usec: 0)
when :minute
time.change(sec: 0)
when :hour
time.change(min: 0)
when :day
time.beginning_of_day
when :week
weekday = (time.wday - 1) % 7
(time - ((7 - week_start + weekday) % 7).days).midnight
when :month
time.beginning_of_month
when :quarter
time.beginning_of_quarter
when :year
time.beginning_of_year
when :hour_of_day
time.hour
when :day_of_week
time.wday
when :day_of_month
time.day
when :month_of_year
time.month
else
raise Groupdate::Error, "Invalid field"
end
time.is_a?(Time) ? time + day_start.seconds : time
end