2010-05-03 328 views

回答

2

Python中的日期對象不保留wallclock時間的概念。如果你想取一個日期對象並用毫秒來表示,那將全部爲0。

datetime模塊跳過毫秒並在其格式中支持微秒。所以當你打印一個日期時間或者在解釋器中看到一個時,最後一個字段是微秒。如果您需要毫秒,則可以將該字段除以1000.

下面是來自Python 3.2b2解釋器會話的幾個示例。這裏有一些額外的東西,所以你可以看到我用來獲得時間戳的基本路線。它不被視爲reading the docs的替代品:

>>> x = datetime.datetime.today() 
>>> y = datetime.date.today() 
>>> x 
datetime.datetime(2011, 2, 6, 8, 2, 9, 465714) 
>>> y 
datetime.date(2011, 2, 6) 
>>> y.strftime('%Y-%m-%d.%f') 
'2011-02-06.000000' 
>>> x 
datetime.datetime(2011, 2, 6, 8, 2, 9, 465714) 
>>> str(x) 
'2011-02-06 08:02:09.465714' 
>>> x.microsecond 
465714 
>>> x.time() 
datetime.time(8, 2, 9, 465714) 
>>> x.time().microsecond/1000 
465.714 # milliseconds and microseconds. 
>>> int(x.time().microsecond/1000) 
465 # milliseconds 
>>> s = '{:02d}:{:02d}:{:02d}.{:3d}'.format(r.hour, r.minute, r.second, int(r.microsecond/1000), '2s') 
>>> s 
'08:02:09.465' 
0

什麼是最Python的方式取決於你想要什麼,當你說「時間戳」。一個數字或字符串?

對於字符串,d.isoformat()是最容易的一個。對於你自己的號碼:

time.mktime(d.timetuple()) + d.microsecond/1000000.0 

這是假設datetime的對象。當你說你想從date對象獲得毫秒精度時間戳時,我不確定你的意思。 date對象甚至沒有秒,毫秒更少。 :-)

+0

注意tha t unix時間戳傳統上是UTC,而mktime()是時區相關的。使用calendar.timegm()(請參閱http://stackoverflow.com/questions/2956886/python-calendar-timegm-vs-time-mktime)。 – 2012-04-17 13:44:10

8

下已經工作了我的目的:

爲datetime從毫秒時間戳

import datetime 
timestamp #=> 1317912250955 
dt = datetime.datetime.fromtimestamp(time/1000.0) 
dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000) 

從日期時間到毫秒的時間戳

import time 
dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000) 
timestamp = int((time.mktime(dt.timetuple()) + dt.microsecond/1000000.0)*1000) 
timestamp #=> 1317912250955 
+3

小心,最後一個操作將給定的日期時間解釋爲本地時間,而不是UTC! – Michael 2012-12-23 04:55:29