[python] 파이썬에서`datetime` 객체를 초로 어떻게 변환합니까?

간단한 질문에 대한 사과 … 나는 파이썬에 익숙하지 않다 … 나는 주변을 탐색했지만 아무것도 작동하지 않는 것 같다.

datetime 객체가 많이 있고 각 시간에 대해 고정 시간 이후의 초 수를 계산하려고합니다 (예 : 1970 년 1 월 1 일 이후).

import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)

이것은 다른 날을 가진 날짜 사이에서만 차별화되는 것으로 보입니다.

t.toordinal()

도움을 주시면 감사하겠습니다.



답변

1970 년 1 월 1 일의 특별 날짜에는 여러 가지 옵션이 있습니다.

다른 시작 날짜의 경우 두 날짜 간의 차이를 초 단위로 가져와야합니다. 두 날짜를 빼면 timedelta파이썬 2.7부터 total_seconds()함수 가있는 객체가 생깁니다 .

>>> (t-datetime.datetime(1970,1,1)).total_seconds()
1256083200.0

시작 날짜는 일반적으로 UTC로 지정되므로 적절한 결과를 얻으려면 datetime이 수식에 피드를 입력해야합니다. datetimeUTC가 아닌 경우 사용하기 전에 변환하거나 tzinfo적절한 오프셋이 있는 클래스를 연결해야합니다 .

의견에서 언급했듯이, tzinfo첨부 파일이 있으면 datetime시작 날짜에 하나가 필요합니다. 그렇지 않으면 빼기가 실패합니다. 위의 예에서는 tzinfo=pytz.utcPython 2를 사용하거나 tzinfo=timezone.utcPython 3을 사용하는 경우 추가 합니다 .


답변

유닉스 시간을 얻으려면 (1970 년 1 월 1 일 이후의 초) :

>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0


답변

파이썬 3.3부터는이 datetime.timestamp()방법으로 매우 쉬워집니다 . 이것은 물론 1970-01-01 UTC에서 초가 필요한 경우에만 유용합니다.

from datetime import datetime
dt = datetime.today()  # Get timezone naive now
seconds = dt.timestamp()

반환 값은 1 초의 분수를 나타내는 float가됩니다. 날짜 시간이 시간대 순진 (위의 예에서와 같이) 인 경우 날짜 시간 객체가 현지 시간을 나타내는 것으로 가정합니다. 즉, 현재 시간에서 현재 위치에서 1970-01-01 UTC까지의 시간 (초)이됩니다.


답변

아마 주제에서 벗어난 것 : 날짜 시간에서 UNIX / POSIX 시간을 가져 와서 다시 변환하려면 다음을 수행하십시오.

>>> import datetime, time
>>> dt = datetime.datetime(2011, 10, 21, 0, 0)
>>> s = time.mktime(dt.timetuple())
>>> s
1319148000.0

# and back
>>> datetime.datetime.fromtimestamp(s)
datetime.datetime(2011, 10, 21, 0, 0)

다른 시간대는 결과에 영향을 미칩니다 (예 : 현재 TZ / DST 반품 :

>>>  time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple())
-3600 # -1h

따라서 UTC 버전의 함수를 사용하여 UTC로 정규화하는 것을 고려해야합니다.

노트 이전 결과는 UTC를 계산하는 데 사용할 수있는 현재 시간대의 오프셋 (offset)입니다. 이 예에서 이것은 + 1h, 즉 UTC + 0100입니다.

참고 문헌 :


답변

int (t.strftime("%s")) 또한 작동


답변

파이썬 문서에서 :

timedelta.total_seconds()

지속 시간에 포함 된 총 시간 (초)을 반환합니다. 에 해당

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

진정한 나누기가 활성화 된 상태에서 계산됩니다.

매우 큰 시간 간격 (대부분의 플랫폼에서 270 년 이상)의 경우이 방법은 마이크로 초 정확도를 잃습니다.

이 기능은 버전 2.7의 새로운 기능입니다.


답변

UTC로 시간을 나타내는 날짜 / 시간 객체를 POSIX 타임 스탬프로 변환하려면 :

from datetime import timezone

seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()

로컬 시간대의 시간을 나타내는 날짜 시간 오브젝트를 POSIX 시간 소인으로 변환하려면 다음을 수행하십시오.

import tzlocal # $ pip install tzlocal

local_timezone = tzlocal.get_localzone()
seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()

Python에서 현지 시간을 UTC로 변환하는 방법을 참조하십시오 . 특정 플랫폼에서 tz 데이터베이스를 사용할 수있는 경우 stdlib 전용 솔루션이 작동 할 수 있습니다 .

<3.3Python 버전 용 솔루션이 필요한 경우 링크를 따르십시오 .