如何将可读的时间(例如20.12.2016 09:38:42,76
)转换为毫秒级的Unix时间戳?
如何将可读的时间(例如20.12.2016 09:38:42,76
)转换为毫秒级的Unix时间戳?
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
接受你的时间字符串和一个格式字符串作为输入。时间字符串(第一个参数)指定了你想要转换为datetime
对象的内容。格式字符串(第二个参数)指定了你传递的字符串的实际格式。以下是来自官方文档的格式说明:
%d
- 月份中的日期,用零填充。%m
- 月份,用零填充。%Y
- 带有世纪的年份,用十进制表示。%H
- 小时(24小时制),用零填充。%M
- 分钟,用零填充。%S
- 秒,用零填充。%f
- 微秒,用小数表示,补零至6位。对于那些在不解析和浪费毫秒的情况下寻找答案的人,假设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
>>> 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
对于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
这是一个关于将Python datetime转换为时间戳的简单解决方案(如标题所示)。如果您的输入是字符串,则使用datetime.strptime将其转换为datetime对象。
from datetime import datetime
dt_obj = datetime.utcnow() # input datetime object
毫秒
int(float(dt_obj.strftime('%s.%f')) * 1e3)
1656096296215
微秒
int(float(dt_obj.strftime('%s.%f')) * 1e6)
1656096296215242
def datetime_to_ms_epoch(dt):
microseconds = time.mktime(dt.timetuple()) * 1000000 + dt.microsecond
return int(round(microseconds / float(1000)))
datetime.datetime.strptime
提供一个适当的格式字符串。请参阅文档。 - a_guest