Eğer d = date(2011, 1, 1)UTC geçerli:
>>> from datetime import datetime, date
>>> import calendar
>>> timestamp1 = calendar.timegm(d.timetuple())
>>> datetime.utcfromtimestamp(timestamp1)
datetime.datetime(2011, 1, 1, 0, 0)
Eğer dyerel saat diliminde geçerli:
>>> import time
>>> timestamp2 = time.mktime(d.timetuple()) # DO NOT USE IT WITH UTC DATE
>>> datetime.fromtimestamp(timestamp2)
datetime.datetime(2011, 1, 1, 0, 0)
timestamp1ve timestamp2yerel saat dilimindeki gece yarısı UTC'deki gece yarısı ile aynı saat örneği değilse farklılık gösterebilir.
mktime()eğer bir yanlış sonuç döndürebilir dbir karşılık gelir (DST geçiş sırasında örneğin) belirsiz yerel saat veya eğer dofset utc farklı olabilirdi geçmiş (gelecek) tarihtir ve C mktime()erişimi yok tz veritabanında verilen platformda . Sen olabilir kullanmak pytz(aracılığıyla, örneğin modülü tzlocal.get_localzone()tüm platformlarda tz veritabanına erişmek için) . Ayrıca, utcfromtimestamp()başarısız olabilir vemktime()"right" saat dilimi kullanılırsa POSIX dışı zaman damgası döndürebilir .
datetime.dateUTC'de olmayan tarihi temsil eden nesneyi dönüştürmek içincalendar.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'ye göre çağdan bu yana bir tarihi nasıl saniyeye dönüştürürüm?
Dönüştürmek için datetime.datetime(değildatetime.dateUTC'de zamanı temsil eden nesneyi karşılık gelen POSIX zaman damgasına (a float) ).
Python 3.3+
datetime.timestamp():
from datetime import timezone
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
Not: Tedarik etmek gerekir timezone.utc Aksi halde .timestamp()naif datetime nesnenizin yerel saat diliminde olduğunu varsayalım.
Python 3 (<3.3)
İçin dokümanlardan datetime.utcfromtimestamp():
Zaman damgasını datetime örneğinden edinmenin bir yöntemi yoktur, ancak datetime örneğine dt karşılık gelen POSIX zaman damgası aşağıdaki gibi kolayca hesaplanabilir. Saf bir dt için:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Ve farkında bir dt için:
timestamp = (dt - datetime(1970,1,1, tzinfo=timezone.utc)) / timedelta(seconds=1)
İlginç okuma: Dönem zamanı ile günün saati arasındaki fark Saat kaçta ? ve kaç saniye geçti?
Ayrıca bakınız: datetime bir "epoch" yöntemine ihtiyaç duyar
Python 2
Yukarıdaki kodu Python 2'ye uyarlamak için:
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
Burada timedelta.total_seconds(), (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6gerçek bölüm etkinken hesaplanan ile eşdeğerdir .
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)
Kayan nokta sorunlarına dikkat edin .
Çıktı
2012-01-08 15:34:10.022403
1326036850.02
Bilinçli bir datetimenesneyi POSIX zaman damgasına dönüştürme
assert dt.tzinfo is not None and dt.utcoffset() is not None
timestamp = dt.timestamp() # Python 3.3+
Python 3'te:
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)
Python 2'de:
# utc time = local time - utc offset
utc_naive = dt.replace(tzinfo=None) - dt.utcoffset()
timestamp = (utc_naive - datetime(1970, 1, 1)).total_seconds()