将日期、日期时间转换为时间戳
我该如何从一个 date
或 datetime
对象中生成一个精确到毫秒的时间戳呢?
有很多方法可以做到这一点,我在想哪种方式最符合Python的风格。
3 个回答
0
你说的“时间戳”到底指的是什么,取决于你想要什么,是数字还是字符串?
如果你想要字符串,使用 d.isoformat()
是最简单的方式。如果你需要数字,你可以这样做:
time.mktime(d.timetuple()) + d.microsecond/1000000.0
这里假设你在使用 datetime
对象。我不太明白你说想要从 date
对象获取毫秒级的时间戳是什么意思。因为 date
对象连秒都没有,更别提毫秒了。:-)
2
在Python中,日期对象并不保留实际的时钟时间。如果你想用一个日期对象来表示带有毫秒的时间,结果会显示为全是0。
datetime模块在格式化时跳过了毫秒,只支持微秒。所以当你打印一个datetime对象或者在解释器中查看时,最后一部分就是微秒。如果你想要毫秒,可以把那个字段的值除以1000。
下面是一些来自Python 3.2b2解释器的例子。这里有一些额外的内容,帮助你了解我如何得到时间戳的基本步骤。这并不能替代阅读文档:
>>> 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'
11
以下内容对我来说很有效:
从毫秒时间戳转换为日期时间
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