Programing

날짜 시간을 유닉스 타임 스탬프로 변환하고 파이썬으로 다시 변환하십시오.

lottogame 2020. 6. 5. 08:02
반응형

날짜 시간을 유닉스 타임 스탬프로 변환하고 파이썬으로 다시 변환하십시오.


나는 dt = datetime(2013,9,1,11)이 datetime 객체의 유닉스 타임 스탬프를 얻고 싶습니다.

내가 할 때 나는 (dt - datetime(1970,1,1)).total_seconds()타임 스탬프를 얻었다 1378033200.

를 사용하여 다시 변환 할 때 datetime.fromtimestamp얻었습니다 datetime.datetime(2013, 9, 1, 6, 0).

시간이 맞지 않습니다. 내가 여기서 무엇을 놓쳤습니까?


여기서 놓친 것은 시간대입니다.

아마도 UTC 시간이 5 시간이므로 2013-09-01T11 : 00 : 00 로컬과 2013-09-01T06 : 00 : 00Z는 같은 시간입니다.

datetime시간대와 "순진한"및 "인식"개체에 대해 설명 하는 문서 상단을 읽어야 합니다.

원래 순진 날짜 시간이 UTC 인 경우이를 복구하는 방법은 utcfromtimestamp대신에 사용하는 것입니다 fromtimestamp.

반면에 원래 순진한 날짜 시간이 현지 시간 인 경우 UTC 타임 스탬프를 빼지 않아야합니다. 사용하는 datetime.fromtimestamp(0)대신.

또는 datetime 객체를 알고있는 경우 양쪽에서 로컬 인식 시간을 사용하거나 UTC와 명시 적으로 변환해야합니다.

Python 3.3 이상을 가지고 있거나 업그레이드 할 수 timestamp있는 경우 직접 수행하는 방법을 알아내는 대신 방법을 사용하여 이러한 모든 문제를 피할 수 있습니다 . 그렇지 않은 경우에도 소스 코드 대여 를 고려할 수 있습니다 .

(그리고 파이썬 3.4를 기다릴 수 있다면 PEP 341 이 최종 릴리스로 만들 것 같습니다. 즉, JF Sebastian과 내가 언급 한 모든 내용은 stdlib로만 가능해야합니다. Unix와 Windows에서 동일한 방식으로 작동합니다.)


해결책은

import time
import datetime
d = datetime.date(2015,1,5)

unixtime = time.mktime(d.timetuple())

오히려이 표현보다 POSIX 타임 스탬프를에서 만들 수 있습니다 dt,

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

이것을 사용하십시오 :

int(dt.strftime("%s"))

두 번째 방법을 사용하여 귀하의 예에서 정답을 얻습니다.

편집 : 일부 후속 조치 ... 일부 의견 (아래 참조) 후에에 대한 지원이나 문서가 부족한 것에 대해 궁금 %s했습니다 strftime. 내가 찾은 것은 다음과 같습니다.

에서 파이썬 소스 에 대한 datetimetime, 문자열이 STRFTIME_FORMAT_CODES우리에게 알려줍니다 :

"Other codes may be available on your platform.
 See documentation for the C library strftime function."

이제 우리 man strftime(Mac OS X와 ​​같은 BSD 시스템)에서 다음을 지원합니다 %s.

"%s is replaced by the number of seconds since the Epoch, UTC (see mktime(3))."

어쨌든 %s그것이 시스템에서 작동하는 이유 입니다. 그러나 표준 시간대를 고려한 OP 문제에 대한 더 나은 솔루션이 있습니다. 여기 @abarnert의 허용 답변을 참조하십시오.


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

>>> import datetime
>>> datetime.datetime(2012,04,01,0,0).strftime('%s')
'1333234800'
>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()
1333238400.0

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

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

시간대 정보를 놓쳤습니다 (이미 답변, 동의 함)

arrow패키지 는 datetimes와 함께이 고문을 피할 수 있습니다; 이미 작성, 테스트, pypi-published, cross-python (2.6 — 3.xx)입니다.

필요한 것 : pip install arrow(또는 의존성에 추가)

귀하의 경우를위한 솔루션

dt = datetime(2013,9,1,11)
arrow.get(dt).timestamp
# >>> 1378033200

bc = arrow.get(1378033200).datetime
print(bc)
# >>> datetime.datetime(2013, 9, 1, 11, 0, tzinfo=tzutc())
print(bc.isoformat())
# >>> '2013-09-01T11:00:00+00:00'

If your datetime object represents UTC time, don't use time.mktime, as it assumes the tuple is in your local timezone. Instead, use calendar.timegm:

>>> import datetime, calendar
>>> d = datetime.datetime(1970, 1, 1, 0, 1, 0)
>>> calendar.timegm(d.timetuple())
60

For working with UTC timezones:

time_stamp = calendar.timegm(dt.timetuple())

datetime.utcfromtimestamp(time_stamp)

Well, when converting TO unix timestamp, python is basically assuming UTC, but while converting back it will give you a date converted to your local timezone.

See this question/answer; Get timezone used by datetime.datetime.fromtimestamp()


def dt2ts(dt, utc=False):
    if utc:
        return calendar.timegm(dt.timetuple())
    if dt.tzinfo is None:
        return int(time.mktime(dt.timetuple()))
    utc_dt = dt.astimezone(tz.tzutc()).timetuple()
    return calendar.timegm(utc_dt)

If you want UTC timestamp :time.mktime just for local dt .Use calendar.timegm is safe but dt must the utc zone so change the zone to utc. If dt in UTC just use calendar.timegm.


def datetime_to_epoch(d1):

    # create 1,1,1970 in same timezone as d1
    d2 = datetime(1970, 1, 1, tzinfo=d1.tzinfo)
    time_delta = d1 - d2
    ts = int(time_delta.total_seconds())
    return ts


def epoch_to_datetime_string(ts, tz_name="UTC"):
    x_timezone = timezone(tz_name)
    d1 = datetime.fromtimestamp(ts, x_timezone)
    x = d1.strftime("%d %B %Y %H:%M:%S")
    return x

참고URL : https://stackoverflow.com/questions/19801727/convert-datetime-to-unix-timestamp-and-convert-it-back-in-python

반응형