Django/model

[Django] 날짜 형식 체크

두잇 두두 2024. 3. 4. 21:41
728x90

배경

날짜 형식을 받아서 날짜 형식이 맞으면 저장하고 날짜 형식이 맞지 않으면 저장하지 않으려는 코드를 구현하고자 했습니다.

프론트에서 str로 받기 때문에 datetime으로 바꾼 후에 체크해야 하는데 이 점을 잘 알아야 합니다

 

 

코드

try:
    # 시도: '%Y-%m-%d %H:%M:%S' 형식
    datetime_object = datetime.strptime(ended_at, '%Y-%m-%d %H:%M:%S')
except ValueError:
    try:
        # 시도: '%Y-%m-%dT%H:%M:%S' 형식 (ISO 8601)
        datetime_object = datetime.strptime(ended_at, '%Y-%m-%dT%H:%M:%S')
    except ValueError:
        # 어떤 형식에도 맞지 않을 경우
        print(f"{ended_at}은 유효한 날짜 형식이 아닙니다.")
        return None

표준으로 처리하려고 할 시 이렇게 긴 코드가 나오고 s에 값이 들어가지 않을 시 Value error를 뿜어내기 때문에 처리 로직이 늘어나게 된다

 

그래서 django util을 사용하였다

from django.utils.dateparse import parse_datetime

def change_ended_at(self, ended_at: datetime):
    if ended_at and parse_datetime(ended_at):
        self.ended_at = ended_at
    else:
        return

 

설명

ended_at이 있을 경우 parser_datetime에 맞는 형식인지 체크하게 된다.

지금 다시 생각해보니 바로 self.ended_at에 parse_datetime()를 넣어서 datetime 변환된 값을 넣는게 더 좋은 코드인 것 같다.

(가독성에서 안좋으려나)

 

https://docs.djangoproject.com/en/1.8/_modules/django/utils/dateparse/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

배운 점

생각보다 datetime 형식체크를 직접 구현하려고 하면 까다롭다는 것이다