# File lib/active_ldap/schema/syntaxes.rb, line 179
        def type_cast(value)
          return value if value.nil? or value.is_a?(Time)
          match_data = FORMAT.match(value)
          if match_data
            required_components = match_data.to_a[1, 6]
            return value if required_components.any?(&:nil?)
            year, month, day, hour, minute, second =
              required_components.collect(&:to_i)
            fraction = match_data[-2]
            fraction = fraction.to_f if fraction
            time_zone = match_data[-1]
            begin
              Time.send(:make_time,
                        year, month, day, hour, minute, second, fraction,
                        time_zone, Time.now)
            rescue ArgumentError
              raise if year >= 1700
              out_of_range_messages = ["argument out of range",
                                       "time out of range"]
              raise unless out_of_range_messages.include?($!.message)
              Time.at(0)
            rescue RangeError
              raise if year >= 1700
              raise if $!.message != "bignum too big to convert into `long'"
              Time.at(0)
            end
          else
            value
          end
        end