python datetime.now() millisecond 반올림하기

x·2024년 3월 13일
0

python

목록 보기
3/4

mysql db의 datetime은 밀리초가 반올림되어 second단위까지만 표시됐다

python에는 밀리초까지 표시됐고 그래서 db에 데이터가 insert되고 datetime.now()가 나중에 호출됐음에도 시간 범위가 가끔 안맞는 경우가 생겼다

datetime.now() < model.datetime 이 경우 문제가 발생함..
0.59초 < 0.58초(반올림 때문에 1이됨)는 False가 되어야하지만 실제로는 0.59 < 1이라 간헐적으로 True가 됨...

datetime.now()에는 millisecond 속성이 없어서 microsecond를 1000000으로 나누고 반올림을 했다. 반올림한 값은 초가 되므로 delta로 더해주면 datetime이 밀리초단위에서 반올림된다. db와 python의 시간 싱크를 맞춰서 해결함

from datetime import datetime, timedelta


class Time:
    @staticmethod
    def get_now():
        current_datetime = datetime.now()

        rounded_seconds = round(current_datetime.microsecond / 1000000)

        rounded_datetime = (
            current_datetime
            - timedelta(microseconds=current_datetime.microsecond)
            + timedelta(seconds=rounded_seconds)
        )

        return rounded_datetime

0개의 댓글