如何从Python中的date
或datetime
生成毫秒精度的时间戳?
有大量的方法和方法可以做到这一点,我想知道哪种方式和Pythonic方式最多。
答案 0 :(得分:9)
以下内容适用于我的目的:
从毫秒时间戳开始的日期时间
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
答案 1 :(得分:2)
日期对象不保留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'
答案 2 :(得分:0)
什么是最pythonic的方式取决于你说“时间戳”时你想要什么。数字还是字符串?
对于字符串,d.isoformat()
是最简单的。对于你做的数字:
time.mktime(d.timetuple()) + d.microsecond/1000000.0
这是假设datetime
个对象。当你说你想要date
个物体的毫秒精度时间戳时,我不确定你的意思。 date
个对象甚至没有秒,更少的毫秒。 : - )