source

mysql datetime과 python 타임스탬프 사이를 변환하는 적절한 방법은 무엇입니까?

manycodes 2023. 9. 8. 21:38
반응형

mysql datetime과 python 타임스탬프 사이를 변환하는 적절한 방법은 무엇입니까?

http://dev.mysql.com/doc/refman/5.0/en/datetime.html 에 따르면 문자열 값 'YYYY-MM-DD HH:MM:SS'를 타임스탬프 int에 입력합니다.

파이썬의 서류를 찾아봤어요

시도했습니다.

print(time.strptime('2013-01-12 15:27:43', '%Y-%m-%d %H:%M:%S'))   

python은 나에게 이런 결과를 줍니다.

time.time.tim_time(tm_year=2013, tm_mon=1, tm_mday=12, tm_hour=15, tm_min=27, tm_sec=43, tm_wday=5, tm_yday=12, tm_isdst=-1)

타임스탬프를 YYY-MM-DD HH로 변환하려고 시도했습니다.MM:SS 형식

print(time.strftime('%Y-%m-%d %H:%M:%S',time.time()))

파이썬은 제게 타입 에러를 주세요.

타임스탬프만 사용하여 시간과 날짜를 계산합니다. 파이썬에 이미 간단하고 효율적인 방법이 있기를 바라며 임시 데이터를 만들 필요가 없습니다.

답에 따르면 나는 두가지 방법을 씁니다.도움이 되기를 바랍니다

import time

def convertTimestampToSQLDateTime(value):
    return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(value))

def convertSQLDateTimeToTimestamp(value):
    return time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S'))

제가 제대로 이해하지 못하는 경우 이를 업데이트하게 되어 기쁘지만 도움이 될 수 있는 몇 가지 예가 있습니다.이 방법은 다음을 사용합니다.datetime대신 모듈을 구성합니다.time.

>>> import datetime

여기서는 예제 타임스탬프를 설정합니다.ts양식과f:

>>> ts = '2013-01-12 15:27:43'
>>> f = '%Y-%m-%d %H:%M:%S'

위에서 하신 것과 유사하게 우리는 다음을 사용합니다.strptime기능(출처)datetime.datetime우리의 끈을 a로 변환합니다.datetime형식 지정 매개 변수를 기반으로 하는 개체:

>>> datetime.datetime.strptime(ts, f)
datetime.datetime(2013, 1, 12, 15, 27, 43)

이제 역으로 - 여기서는 사용합니다.datetime.datetime.now()현재 시간을 a로 구하다datetime개체:

>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 1, 12, 0, 46, 54, 490219)

에서datetime케이스, 더strftime메소드는 실제로 호출됩니다.datetime형식 지정 매개 변수를 인수로 사용하는 개체 자체:

>>> now.strftime(f)   
'2013-01-12 00:46:54'

당신의 상황에서, 당신이 오류를 얻은 이유는time.time()플로트를 반환합니다.

>>> time.time()
1357980846.290231

그렇지만time.strftime필요합니다.time튜플, 당신이 위에 가졌던 것과 유사합니다.시간인 광기어린 나선에 들어가지 않고 다음과 같은 기능을 수행합니다.time.localtime()위에 언급한 것을 반환할 것입니다.time튜플(tuple)을 사용하면 원하는 대로 돌아올 것입니다.

>>> now = time.localtime()
>>> now
time.struct_time(tm_year=2013, tm_mon=1, tm_mday=12, tm_hour=0, tm_min=55, tm_sec=55, tm_wday=5, tm_yday=12, tm_isdst=0)
>>> f = '%Y-%m-%d %H:%M:%S'
>>> time.strftime(f, now)
'2013-01-12 00:55:55'

저는 다음 사람을 조금이라도 아끼기 위해 이 수업을 추가할 뿐입니다.만약 누군가 이것이 유용하다고 생각한다면, 로켓 당키의 답에 투표하세요.

## dev on v3.7.6

from datetime import datetime
from time import mktime, time


class Time:
    '''\
*Convenience class for easy format conversion*\n
Accepts time() float, datetime object, or SQL datetime str.\n
If no time arg is provided, object is initialized with time().\n
id kwarg can be used to keep track of objects.\n
Access formats as instance.t, instance.dt, or instance.sql.\
    '''

    f = '%Y-%m-%d %H:%M:%S'

    def __init__(self, *arg, id=None) -> None:
        self.id = id
        if len(arg) == 0:
            self.t = time()
            self.dt = self._dt
            self.sql = self._sql
        else:
            arg = arg[0]
            if isinstance(arg, float) or arg == None:
                if isinstance(arg, float):
                    self.t = arg
                else:
                    self.t = time()
                self.dt = self._dt
                self.sql = self._sql
            elif isinstance(arg, datetime):
                self.t = arg.timestamp()
                self.dt = arg
                self.sql = self._sql
            elif isinstance(arg, str):
                self.sql = arg
                if '.' not in arg:
                    self.dt = datetime.strptime(self.sql, Time.f)
                else:
                    normal, fract = arg.split('.')
                    py_t = datetime.strptime(normal, Time.f)
                    self.dt = py_t.replace(
                        microsecond=int(fract.ljust(6, '0')[:6]))
                self.t = self.dt.timestamp()

    @property
    def _dt(self) -> datetime:
        return datetime.fromtimestamp(self.t)

    @property
    def _sql(self) -> str:
        t = self.dt
        std = t.strftime(Time.f)
        fract = f'.{str(round(t.microsecond, -3))[:3]}'
        return std + fract

    def __str__(self) -> str:
        if self.id == None:
            return self.sql
        else:
            return f'Time obj "{self.id}": {self.sql}'


def test():
    def test_one(*arg):
        t = Time(*arg, id=type(*arg))
        print(t)
        print(t.t)
        print(t.dt)

    sql = '2020-01-22 15:30:33.433'
    time_float = 1579927395.3708763
    dt_obj = datetime.now()
    for datum in [sql, time_float, dt_obj, None]:
        test_one(datum)


if __name__ == '__main__':
    test()

언급URL : https://stackoverflow.com/questions/14291636/what-is-the-proper-way-to-convert-between-mysql-datetime-and-python-timestamp

반응형