We shouldn't be performing validation on assignment.

I think this can be done easier & better using a custom validation:

```
class Experiment
  validate :validate_times

  private

  def validate_times
    %w[start_date end_date].each do |attribute|
      value = read_attribute_before_type_cast(attribute) or
        return
      begin
        DateTime.parse(value)
      rescue ArgumentError
        errors.add(attribute, "invalid date")
      end
    end
  end

  ...
end
```