【发布时间】:2017-05-28 21:08:18
【问题描述】:
如何将格式为20.12.2016 09:38:42,76 的人类可读时间转换为毫秒 的Unix 时间戳?我发现了很多类似的问题,但没有找到这个特定的问题/答案。
【问题讨论】:
-
您需要向
datetime.datetime.strptime提供适当的格式字符串。见the docs。
标签: python datetime unix-timestamp
如何将格式为20.12.2016 09:38:42,76 的人类可读时间转换为毫秒 的Unix 时间戳?我发现了很多类似的问题,但没有找到这个特定的问题/答案。
【问题讨论】:
datetime.datetime.strptime 提供适当的格式字符串。见the docs。
标签: python datetime unix-timestamp
其中很多答案都没有保留日期时间的毫秒数。这对我有用
def datetime_to_ms_epoch(dt):
microseconds = time.mktime(dt.timetuple()) * 1000000 + dt.microsecond
return int(round(microseconds / float(1000)))
【讨论】:
对于那些在不解析和丢失毫秒的情况下搜索答案的人,
给定dt_obj 是一个日期时间:
仅限python3,优雅
int(dt_obj.timestamp() * 1000)
python2 和 python3 都兼容:
import time
int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
【讨论】:
对于 Python2.7 - 修改 MYGz 的答案以不去除毫秒:
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
d_in_ms = int(float(d)*1000)
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
输出:
1482248322760
2016-12-20 09:38:42.760000
【讨论】:
您需要使用strptime 解析您的时间格式。
>>> import time
>>> from datetime import datetime
>>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
>>> ts
'20.12.2016 09:38:42'
>>> ms
'76'
>>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
>>> time.mktime(dt.timetuple())*1000 + int(ms)*10
1482223122760.0
【讨论】:
在 Python 3 中,这可以分两步完成:
datetime对象datetime 对象的时间戳乘以 1000 以将其转换为毫秒。例如这样:
from datetime import datetime
dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
'%d.%m.%Y %H:%M:%S,%f')
millisec = dt_obj.timestamp() * 1000
print(millisec)
输出:
1482223122760.0
strptime 接受您的时间字符串和格式字符串作为输入。时间字符串(第一个参数)指定 what 您实际上想要转换为 datetime 对象。格式字符串(第二个参数)指定您传递的字符串的实际 格式。
这里是来自official documentation的格式说明符的解释:
%d - 以零填充十进制数表示的月份中的日期。%m - 以零填充十进制数表示的月份。%Y - 年份,世纪为十进制数%H - 小时(24 小时制),用零填充十进制数表示。%M - 用零填充十进制数表示的分钟。%S - 秒作为零填充十进制数。%f - 微秒,十进制数,左侧补零。【讨论】:
对于 Python2.7
您可以将其格式化为秒,然后乘以 1000 转换为毫秒。
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
d_in_ms = int(d)*1000
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
输出:
1482206922000
2016-12-20 09:38:42
【讨论】: