형식의 문자열 "%d/%m/%Y"
을 타임 스탬프 로 변환하는 방법은 무엇입니까?
"01/12/2011" -> 1322697600
형식의 문자열 "%d/%m/%Y"
을 타임 스탬프 로 변환하는 방법은 무엇입니까?
"01/12/2011" -> 1322697600
답변:
>>> import time
>>> import datetime
>>> s = "01/12/2011"
>>> time.mktime(datetime.datetime.strptime(s, "%d/%m/%Y").timetuple())
1322697600.0
calendar.timegm()
또는.toordinal()
datetime.datetime.strptime(s, "%d/%m/%Y").timestamp()
조금 짧습니다
.timestamp()
가정합니다 . 답변의 코드는 로컬 시간대가 0 utc 오프셋이있는 컴퓨터에서만 작동합니다 (예상 생성 ). 1322697600
문자열을 날짜 객체로 변환하려면
from datetime import date, datetime
date_string = "01/12/2011"
date_object = date(*map(int, reversed(date_string.split("/"))))
assert date_object == datetime.strptime(date_string, "%d/%m/%Y").date()
날짜 개체를 POSIX 타임 스탬프로 변환하는 방법은 시간대에 따라 다릅니다. 에서 변환 datetime.date
파이썬에서 UTC 타임 스탬프에 :
날짜 객체는 UTC 자정을 나타냅니다
import calendar
timestamp1 = calendar.timegm(utc_date.timetuple())
timestamp2 = (utc_date.toordinal() - date(1970, 1, 1).toordinal()) * 24*60*60
assert timestamp1 == timestamp2
날짜 개체는 현지 시간으로 자정을 나타냅니다
import time
timestamp3 = time.mktime(local_date.timetuple())
assert timestamp3 != timestamp1 or (time.gmtime() == time.localtime())
UTC와 현지 시간 자정이 같은 경우가 아니면 타임 스탬프가 다릅니다.
NameError: name 'wckCalendar' is not defined
합니다. Windows 32 비트 시스템에서 Python 3.4.1을 실행 중입니다. 어떤 생각? 감사.
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
"%s"
파이썬은 지원하지 않습니다 . 휴대용이 아닙니다.
답변은 입력 날짜 시간대에 따라 다릅니다. 날짜가 현지 날짜 인 경우 katrielalex가 말한 것처럼 mktime ()을 사용할 수 있습니다.이 짧은 버전 대신 datetime을 사용한 이유는 모르겠습니다.
>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0
그러나 아마도 다른 TZ에있을 때 내 결과와 다른 결과를 관찰하십시오 (결과는 시간대가없는 UNIX 타임 스탬프입니다)
입력 날짜가 이미 UTC 인 경우 올바른 해결책은 다음과 같습니다.
>>> calendar.timegm(time.strptime('01/12/2011', '%d/%m/%Y'))
1322697600
간단히 사용하십시오 datetime.datetime.strptime
:
import datetime
stime = "01/12/2011"
print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
결과:
1322697600
현지 시간대 대신 UTC를 사용하려면 다음을 사용하십시오 .replace
.
datetime.datetime.strptime(stime, "%d/%m/%Y").replace(tzinfo=datetime.timezone.utc).timestamp()
float
그렇지 않습니다.int
이 많은 답변은 날짜가 처음부터 순진하다는 것을 고려하지 않습니다.
올바르게하려면 순진한 날짜를 시간대를 인식하는 날짜 / 시간으로 만들어야합니다.
import datetime
import pytz
# naive datetime
d = datetime.datetime.strptime('01/12/2011', '%d/%m/%Y')
>>> datetime.datetime(2011, 12, 1, 0, 0)
# add proper timezone
pst = pytz.timezone('America/Los_Angeles')
d = pst.localize(d)
>>> datetime.datetime(2011, 12, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)
# convert to UTC timezone
utc = pytz.UTC
d = d.astimezone(utc)
>>> datetime.datetime(2011, 12, 1, 8, 0, tzinfo=<UTC>)
# epoch is the beginning of time in the UTC timestamp world
epoch = datetime.datetime(1970,1,1,0,0,0,tzinfo=pytz.UTC)
>>> datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>)
# get the total second difference
ts = (d - epoch).total_seconds()
>>> 1322726400.0
또한:
사용주의 pytz
에 대한 tzinfo
A의 datetime.datetime
많은 시간대에 대한하지 않습니다 작동합니다. pytz 시간대가있는 datetime을 참조하십시오 . tzinfo 설정 방법에 따라 다른 오프셋
# Don't do this:
d = datetime.datetime(2011, 12, 1,0,0,0, tzinfo=pytz.timezone('America/Los_Angeles'))
>>> datetime.datetime(2011, 1, 12, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>)
# tzinfo in not PST but LMT here, with a 7min offset !!!
# when converting to UTC:
d = d.astimezone(pytz.UTC)
>>> datetime.datetime(2011, 1, 12, 7, 53, tzinfo=<UTC>)
# you end up with an offset
나는 dateutil 을 제안 할 것이다 :
import dateutil.parser
dateutil.parser.parse("01/12/2011", dayfirst=True).timestamp()
"%d/%m/%Y"
형식 시간이 필요 합니다. 비교 : dateutil.parser.parse("01/02/2001")
와datetime.strptime("01/02/2001", "%d/%m/%Y")
1322697600
현지 시간대가 UTC가 아닌 한 예상치를 생성하지 않습니다 . 2014에서 내 의견
매우 효율적인 것 같습니다 :
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
루프 당 1.61 µs ± 120ns (평균 7 번의 런, 평균 100000 루프)
datetime
기능 은 무엇입니까 ? 라이브러리 datetime
에서 datetime
지원하지 않습니다.timestamp()
strptime
from 함수 를 사용하여 datetime.datetime
시간대와 함께 모든 형식의 날짜를 변환하려면 다음 링크를 참조하십시오 .
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
UNIX Epoch 시간을 얻는 간단한 기능.
참고 :이 기능은 입력 날짜 시간이 UTC 형식이라고 가정합니다 ( 여기의 설명 참조).
def utctimestamp(ts: str, DATETIME_FORMAT: str = "%d/%m/%Y"):
import datetime, calendar
ts = datetime.datetime.utcnow() if ts is None else datetime.datetime.strptime(ts, DATETIME_FORMAT)
return calendar.timegm(ts.utctimetuple())
사용법 :
>>> utctimestamp("01/12/2011")
1322697600
>>> utctimestamp("2011-12-01", "%Y-%m-%d")
1322697600