2010-05-03 229 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