global

def self.define_write_method_for_time_zone_conversion(attr_name)

ugh
def self.define_write_method_for_time_zone_conversion(attr_name)
  method_body = <<-EOV
    def #{attr_name}=(time)
      unless time.acts_like?(:time)
        time = time.is_a?(String) ? (I18n.delocalization_enabled? ? Time.zone.parse_localized(time) : Time.zone.parse(time)) : time.to_time rescue time
      end
      time = time.in_time_zone rescue nil if time
      write_attribute(:#{attr_name}, time)
    end
  EOV
  evaluate_attribute_method attr_name, method_body, "#{attr_name}="
end