コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
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)
コード例 #4
0
    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)
コード例 #5
0
    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
コード例 #6
0
    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)