간단한 질문에 대한 사과 … 나는 파이썬에 익숙하지 않다 … 나는 주변을 탐색했지만 아무것도 작동하지 않는 것 같다.
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
이 수식에 피드를 입력해야합니다. datetime
UTC가 아닌 경우 사용하기 전에 변환하거나 tzinfo
적절한 오프셋이 있는 클래스를 연결해야합니다 .
의견에서 언급했듯이, tzinfo
첨부 파일이 있으면 datetime
시작 날짜에 하나가 필요합니다. 그렇지 않으면 빼기가 실패합니다. 위의 예에서는 tzinfo=pytz.utc
Python 2를 사용하거나 tzinfo=timezone.utc
Python 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입니다.
참고 문헌 :
- datetime.date.timetuple
- time.mktime
- datetime.datetime.fromtimestamp
- 시간 모듈 소개 는 POSIX 시간, 1970 시대, UTC, TZ, DST를 설명합니다 …
답변
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.3
Python 버전 용 솔루션이 필요한 경우 링크를 따르십시오 .