Programming

strftime을 사용하여 Python datetime을 epoch로 변환

procodes 2020. 5. 17. 21:44
반응형

strftime을 사용하여 Python datetime을 epoch로 변환


에포크 이후 초 수를 원하는 UTC 시간이 있습니다.

strftime을 사용하여 초 수로 변환하고 있습니다. 2012 년 4 월 1 일을 예로 들어 보겠습니다.

>>>datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

epoch의 UTC는 1333238400이지만 1 시간마다 다른 1333234800을 반환합니다.

따라서 strftime이 시스템 시간을 고려하여 시간대 이동을 어딘가에 적용하는 것처럼 보입니다. 나는 날짜 시간이 순전히 순진하다고 생각 했습니까?

그 문제를 어떻게 해결할 수 있습니까? 가능한 경우 표준이 아닌 경우 다른 라이브러리를 가져 오지 마십시오. (이동성 문제가 있습니다).


에포크 이후로 파이썬 날짜 시간을 초로 변환하려면 명시 적으로 수행 할 수 있습니다.

>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0

Python 3.3 이상에서는 timestamp()대신 사용할 수 있습니다 .

>>> datetime.datetime(2012,4,1,0,0).timestamp()
1333234800.0

왜 사용하지 않아야 하는가 datetime.strftime('%s')

파이썬은 실제로 % s를 strftime에 대한 인수로 지원하지 않습니다 ( http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior 에서 확인 하면 목록에 없음) 그것이 작동하는 이유는 파이썬이 현지 시간대를 사용하는 시스템의 strftime에 정보를 전달하기 때문입니다.

>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'

시간대 등에 심각한 문제가있었습니다. 파이썬이 혼란스러워하는 모든 것을 처리하는 방식은 나에게 혼란 스럽습니다. 캘린더 모듈을 사용하면 문제가없는 것 같습니다 (링크 1 , 2 , 34 참조 ).

>>> import datetime
>>> import calendar
>>> aprilFirst=datetime.datetime(2012, 04, 01, 0, 0)
>>> calendar.timegm(aprilFirst.timetuple())
1333238400

import time
from datetime import datetime
now = datetime.now()

time.mktime(now.timetuple())

import time
from datetime import datetime
now = datetime.now()

# same as above except keeps microseconds
time.mktime(now.timetuple()) + now.microsecond * 1e-6

(죄송합니다, 기존 답변에 대해서는 언급하지 않습니다)


유닉스 / 에포크 시간으로 타임 스탬프가 필요하면이 한 줄이 작동합니다.

created_timestamp = int((datetime.datetime.now() - datetime.datetime(1970,1,1)).total_seconds())
>>> created_timestamp
1522942073L

datetimepython2 및 python3의 작품 에만 의존합니다.


이것은 Python 2와 3에서 작동합니다.

>>> import time
>>> import calendar
>>> calendar.timegm(time.gmtime())
1504917998

공식 문서를 따르면 ... https://docs.python.org/2/library/time.html#module-time


명시 적 시간대 독립적 솔루션의 경우 pytz 라이브러리를 사용하십시오.

import datetime
import pytz

pytz.utc.localize(datetime.datetime(2012,4,1,0,0), is_dst=False).timestamp()

출력 (부동) : 1333238400.0


파이썬 3.7에서

date.isoformat () 및 datetime.isoformat ()에서 생성 된 형식 중 하나로 date_string에 해당하는 날짜 시간을 반환합니다. 특히이 함수는 YYYY-MM-DD [* HH [: MM [: SS [.fff [fff]]]] [+ HH : MM [: SS [.ffffff]]] 형식의 문자열을 지원합니다. 여기서 *는 모든 단일 문자와 일치 할 수 있습니다.

https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat

참고 URL : https://stackoverflow.com/questions/11743019/convert-python-datetime-to-epoch-with-strftime

반응형