我在Python中有一个浮点数组,如下所示:
[20010101.0, 20010101.25, 20010101.5, 20010101.75, 20020102.0, ...]
如何将此转换为正确考虑小数的datetime
对象实例,以便我不会丢失小时信息?
dat1 = dt.datetime.strptime(str(20010101.25), "%Y%m%d.%f")
print(dat1.date())
print(dat1.hour)
逻辑上给出:
2001-01-01
0
但我希望它能给出:
2001-01-01
6
答案 0 :(得分:2)
没有直接的方法,
小时数只有4个格式说明符
%H小时(24小时制)作为零填充十进制数。 07
% - H小时(24小时制)作为十进制数。 (平台特定)7
%I小时(12小时制)作为零填充十进制数。 07
% - I小时(12小时制)作为十进制数。 (平台特定)7
您必须自己解析小时并添加到datetime
对象。
答案 1 :(得分:1)
您可以在将它传递给strptime之前转换小时,如下所示:
from datetime import datetime
dates = [20010101.0, 20010101.25, 20010101.5, 20010101.75, 20020102.0]
for a_date in dates:
date, hour = divmod(a_date, 1)
print datetime.strptime('{} {}'.format(int(date), int(24.0 * hour)), "%Y%m%d %H")
给你:
2001-01-01 00:00:00
2001-01-01 06:00:00
2001-01-01 12:00:00
2001-01-01 18:00:00
2002-01-02 00:00:00
答案 2 :(得分:-1)
我认为最好在将原始数据放入datetime模块之前对其进行处理,如下所示:
day, hour = str(20010101.25).split('.')
new_date = day + str(int(float(hour)*24/100))
print datetime.datetime.strptime(new_date, "%Y%m%d%H")