将日期字符串与days作为float转换为datetime对象

时间:2016-03-10 11:26:18

标签: python datetime

我在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

3 个答案:

答案 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")