def to_internal_value(self, value): if isinstance(value, datetime.date) and not isinstance(value, datetime.datetime): self.fail('date') if isinstance(value, datetime.datetime): return self.enforce_timezone(value) for format in self.input_formats: if format.lower() == ISO_8601: try: parsed = parse_datetime(value) except (ValueError, TypeError): pass else: if parsed is not None: return self.enforce_timezone(parsed) else: try: parsed = datetime.datetime.strptime(value, format) except (ValueError, TypeError): pass else: return self.enforce_timezone(parsed) humanized_format = humanize_datetime.datetime_formats(self.input_formats) self.fail('invalid', format=humanized_format)
def to_internal_value(self, value): input_formats = getattr(self, 'input_formats', api_settings.DATETIME_INPUT_FORMATS) if isinstance(value, datetime.date) and not isinstance(value, datetime.datetime): self.fail('date') # 尝试转换为日期类型 tmp_value = str2datetime(value) if tmp_value: value = tmp_value if isinstance(value, datetime.datetime): return self.enforce_timezone(value) for input_format in input_formats: if input_format.lower() == ISO_8601: try: parsed = parse_datetime(value) if parsed is not None: return self.enforce_timezone(parsed) except (ValueError, TypeError): pass else: try: parsed = self.datetime_parser(value, input_format) return self.enforce_timezone(parsed) except (ValueError, TypeError): pass humanized_format = humanize_datetime.datetime_formats(input_formats) self.fail('invalid', format=humanized_format)
def to_internal_value(self, value): input_formats = getattr(self, 'input_formats', api_settings.DATETIME_INPUT_FORMATS) if isinstance(value, datetime.date) and not isinstance(value, datetime.datetime): value = datetime.datetime.combine( value, self.default_time).replace(tzinfo=UTC) if isinstance(value, datetime.datetime): return self.enforce_timezone(value) try: parsed = parse_datetime(value) except (ValueError, TypeError): pass else: if parsed is not None: return self.enforce_timezone(parsed) else: try: parsed = datetime.datetime.combine( parse_date(value), self.default_time) except (ValueError, TypeError): pass else: if parsed is not None: return self.enforce_timezone(parsed) humanized_format = humanize_datetime.datetime_formats(input_formats) self.fail('invalid', format=humanized_format)
def to_internal_value(self, value): value = super().to_internal_value(value) try: # Check if serializing works as strftime has some separate validation rules self.to_representation(value) except ValueError: input_formats = getattr(self, 'input_formats', api_settings.DATETIME_INPUT_FORMATS) humanized_format = humanize_datetime.datetime_formats(input_formats) self.fail('invalid', format=humanized_format) return value
def to_internal_value(self, value): input_formats = "%Y-%m-%d %H:%M:%S+08:00" if isinstance(value, datetime.date) and \ not isinstance(value, datetime.datetime): self.fail('date') if isinstance(value, datetime.datetime): return self.enforce_timezone(value) try: value = "%s+08:00" % value _time = timezone.datetime.strptime(value, input_formats) return _time except (ValueError, TypeError): pass humanized_format = humanize_datetime.datetime_formats(input_formats) self.fail('invalid', format=humanized_format)