将日期、日期时间转换为时间戳

4 投票
3 回答
18287 浏览
提问于 2025-04-15 22:16

我该如何从一个 datedatetime 对象中生成一个精确到毫秒的时间戳呢?

有很多方法可以做到这一点,我在想哪种方式最符合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

撰写回答