파이썬에서 문자열 날짜를 타임 스탬프로 변환
형식의 문자열 "%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
문자열을 날짜 객체로 변환하려면
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와 현지 시간 자정이 같은 경우가 아니라면 타임 스탬프가 다릅니다.
나는 ciso8601
datetime의 strptime보다 62 배 빠른을 사용 합니다.
t = "01/12/2011"
ts = ciso8601.parse_datetime(t)
# to get time in seconds:
time.mktime(ts.timetuple())
>>> int(datetime.datetime.strptime('01/12/2011', '%d/%m/%Y').strftime("%s"))
1322683200
답변은 입력 날짜 시간대에 따라 다릅니다. 날짜가 현지 날짜 인 경우 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()
먼저 문자열을 struct_time 형식으로 변환 하려면 strptime 클래스가 있어야 합니다.
그런 다음 mktime 을 사용 하여 플로트를 얻으십시오.
나는 dateutil 을 제안 할 것이다 :
import dateutil.parser
dateutil.parser.parse("01/12/2011", dayfirst=True).timestamp()
이 많은 답변은 날짜가 처음부터 순진하다는 것을 고려하지 않습니다.
올바르게하려면 순진한 날짜를 시간대를 인식하는 날짜 / 시간으로 만들어야합니다.
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
또한:
Be careful, using pytz
for tzinfo
in a datetime.datetime
DOESN'T WORK for many timezones. See datetime with pytz timezone. Different offset depending on how tzinfo is set
# 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
https://en.wikipedia.org/wiki/Local_mean_time
just use datetime.timestamp(your datetime instanse), datetime instance contains the timezone infomation, so the timestamp will be a standard utc timestamp. if you transform the datetime to timetuple, it will lose it's timezone, so the result will be error. if you want to provide an interface, you should write like this: int(datetime.timestamp(time_instance)) * 1000
Seems to be quite efficient:
import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()
1.61 µs ± 120 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
You can refer this following link for using strptime
function from datetime.datetime
, to convert date from any format along with time zone.
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
Simple function to get utctime.
def utctime(ts=None):
import datetime, calendar
ts = datetime.datetime.utcnow() if ts is None else ts
return calendar.timegm(ts.utctimetuple())
참고URL : https://stackoverflow.com/questions/9637838/convert-string-date-to-timestamp-in-python
'Programing' 카테고리의 다른 글
AngularJS 컨트롤러를 확장하는 데 권장되는 방법은 무엇입니까? (0) | 2020.05.14 |
---|---|
Django 템플릿에 주석을 넣는 방법 (0) | 2020.05.14 |
Mac OS X에서 gradle 설치 / 업그레이드 (0) | 2020.05.14 |
_csv. 오류 : 필드 제한보다 큰 필드 (131072) (0) | 2020.05.14 |
Angular를 사용하여 데이터 속성을 작성하는 방법 (0) | 2020.05.14 |