스택큐힙리스트

파이썬에서 datetime.date를 UTC 타임스탬프로 변환하기 본문

카테고리 없음

파이썬에서 datetime.date를 UTC 타임스탬프로 변환하기

스택큐힙리스트 2023. 4. 19. 09:22
반응형

저는 Python에서 날짜를 다루고 있으며, JavaScript에서 사용하기 위해 UTC 타임스탬프로 변환해야 합니다. 다음 코드는 작동하지 않습니다:

>>> d = datetime.date(2011,01,01)

>>> datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple()))

datetime.datetime(2010, 12, 31, 23, 0)

날짜 객체를 먼저 datetime으로 변환해도 도움이 되지 않습니다. 저는 이 link 에 있는 예제를 시도해봤지만:

from pytz import utc, timezone

from datetime import datetime

from time import mktime

input_date = datetime(year=2011, month=1, day=15)

그리고 이제 아래 중 하나를 선택하십시오:

mktime(utc.localize(input_date).utctimetuple())

또는

mktime(timezone('US/Eastern').localize(input_date).utctimetuple())

일하다.

일반적인 질문: UTC에 따른 초 단위의 일자 변환 방법은 무엇인가요?

답변 1

만약 d = date(2011, 1, 1)이 UTC에 있다면:

>>> from datetime import datetime, date

>>> import calendar

>>> timestamp1 = calendar.timegm(d.timetuple())

>>> datetime.utcfromtimestamp(timestamp1)

datetime.datetime(2011, 1, 1, 0, 0)

만약 d이 로컬 시간대에 있다면:

>>> import time

>>> timestamp2 = time.mktime(d.timetuple()) # DO NOT USE IT WITH UTC DATE

>>> datetime.fromtimestamp(timestamp2)

datetime.datetime(2011, 1, 1, 0, 0)

timestamp1과 timestamp2은 현지 시간대의 자정과 UTC의 자정이 서로 다른 시간이면 다를 수 있습니다.

mktime()는 !@# is a이 mbiguous local time (e.g., during DST transition) or 에 해당하는 경우나 !@# is a가 UTC 오프셋이 다를 수 있는 과거(미래) 일자인 경우에 잘못된 결과를 반환할 수 있으며, 주어진 플랫폼에서 C mktime()가 the tz database에 액세스할 수 없는 경우도 있습니다. use pytz module (e.g., via tzlocal.get_localzone()) to get access to the tz database on all platforms 해 볼 수도 있고, utcfromtimestamp() may fail and mktime() may return non-POSIX timestamp if right timezone is used도 있습니다.

UTC 시간대를 나타내는 datetime.date 개체를 calendar.timegm() 없이 변환하려면:

DAY = 24*60*60 # POSIX day in seconds (exact value)

timestamp = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * DAY

timestamp = (utc_date - date(1970, 1, 1)).days * DAY

UTC에 따라 날짜를 epoch 이후의 초로 변환하는 방법은 무엇인가요?

UTC 시간을 나타내는 datetime.datetime 객체를 해당하는 POSIX 타임스탬프 (a float) 로 변환하십시오.

파이썬 3.3+

datetime.timestamp() : 번역할 수 없는 특수문자입니다.

from datetime import timezone

timestamp = dt.replace(tzinfo=timezone.utc).timestamp()

참고: timezone.utc을(를) 명시적으로 제공해야 합니다. 그렇지 않으면 .timestamp()는 당신의 순진한 datetime 객체가 로컬 시간대에있는 것으로 가정합니다.

파이썬 3 (< 3.3)

datetime.utcfromtimestamp()에 대한 문서에서:

날짜와 시간 인스턴스에서 타임스탬프를 얻는 방법은 없지만, 일반적인 dt에 해당되는 POSIX 타임스탬프는 다음과 같이 쉽게 계산할 수 있습니다. 일반적인 dt의 경우:

timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

그리고 인식있는 dt에게:

timestamp = (dt - datetime(1970,1,1, tzinfo=timezone.utc)) / timedelta(seconds=1)

흥미로운 글: 지금 몇 시야?와 몇 초가 경과했어?의 차이점에 대해 이야기한 Epoch time vs. time of day.

또한 참조: # $$! @ ^ $ & $ &

파이썬 2

위의 코드를 Python 2에 맞게 수정하시오.

timestamp = (dt - datetime(1970, 1, 1)).total_seconds()

$#^@@$^@$&은 true division이-enabled된 경우 $#*@*$&#$&에 상응합니다.

Example

from __future__ import division

from datetime import datetime, timedelta

def totimestamp(dt, epoch=datetime(1970,1,1)):

td = dt - epoch

# return td.total_seconds()

return (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**6

now = datetime.utcnow()

print now

print totimestamp(now)

floating-point issues에 주의하세요.

출력

2012-01-08 15:34:10.022403

1326036850.02

의식있는 datetime 객체를 POSIX 타임스탬프로 변환하는 방법

assert dt.tzinfo is not None and dt.utcoffset() is not None

timestamp = dt.timestamp() # Python 3.3+

파이썬 3에서:

from datetime import datetime, timedelta, timezone

epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)

timestamp = (dt - epoch) / timedelta(seconds=1)

integer_timestamp = (dt - epoch) // timedelta(seconds=1)

파이썬 2에서:

# utc time = local time - utc offset

utc_naive = dt.replace(tzinfo=None) - dt.utcoffset()

timestamp = (utc_naive - datetime(1970, 1, 1)).total_seconds()

답변 2

파이썬에서는 datetime 모듈을 활용하여 다양한 날짜와 시간을 처리할 수 있습니다. 날짜와 시간을 다루는 프로그래밍에서 주로 사용되는 것은 유닉스 타임스탬프(UNIX timestamp)입니다. 유닉스 타임스탬프란 1970년 1월 1일 0시 0분 0초를 기준으로 경과한 초(second) 수를 나타내는 것입니다.

파이썬에서는 datetime.date 객체를 유닉스 타임스탬프로 변환하는 방법이 매우 간단합니다. 먼저 datetime 모듈의 datetime 클래스를 이용하여 datetime 객체를 만듭니다. 이후에 utcfromtimestamp() 메소드를 사용하여 UTC 시간을 획득하고, timestamp() 메소드를 사용하여 유닉스 타임스탬프를 구할 수 있습니다.

예를 들어, 2021년 10월 1일을 UTC 타임스탬프로 변환하고자 한다면 아래와 같이 코드를 작성할 수 있습니다.

import datetime

dt = datetime.datetime(2021, 10, 1)

utc_time = dt.replace(tzinfo=datetime.timezone.utc)

utc_timestamp = utc_time.timestamp()

print(utc_timestamp)

위 코드에서 datetime.datetime() 메소드를 사용하여 2021년 10월 1일을 datetime 객체로 만들고, replace() 메소드로 UTC 시간을 적용합니다. 마지막으로 timestamp() 메소드를 사용하여 유닉스 타임스탬프를 구합니다.

파이썬에서 다양한 시간 처리를 위한 모듈과 메소드들을 활용하면 더욱 정확하고 간편하게 날짜와 시간을 다룰 수 있습니다. 파이썬을 이용하여 다양한 프로그래밍 작업을 수행하는 개발자들은 datetime 모듈에 대해 익숙해지고, 유니크한 방법들을 발견하여 개발 생산성을 높일 수 있습니다.

반응형
Comments