我正在尝试创建一个列表,该列表是通过使用以1分钟为增量的列表理解来生成的。然后它将日期/时间转换为ISO 8601格式。这就是我在想的解决方案,如下所示:
import datetime as dt
t1 = dt.datetime(2001, 10, 10, 0, 0, 0)
t2 = dt.datetime(2001, 10, 15, 0, 0, 0)
time = [t1 + dt.timedelta(minutes = x) for x in range((t2-t1).total_seconds()/60)]
isotime = time.isoformat()
这是半正确的吗?
认为使用熊猫可能会更容易:
import pandas as pd
t1 = pd.to_datetime('2001-10-10 00:00:00')
t2 = pd.to_datetime('2001-10-15 00:00:00')
series = pd.date_range(t1,t2,freq='1min')
iso8601 = [t.strftime('%Y%m%dT%H:%M%SZ') for t in series]
output:
['20011010T00:0000Z', '20011010T00:0100Z', '20011010T00:0200Z', '20011010T00:0300Z', ... ,
'20011014T23:5700Z', '20011014T23:5800Z', '20011014T23:5900Z', '20011015T00:0000Z']
您需要将isoformat
应用于time
列表中的每个项目:
isotime = [t.isoformat() for t in time]
也请注意,range
仅接受整数。您应该将range((t2-t1).total_seconds()/60)
更改为range(int((t2-t1).total_seconds()/60))
尽管,最好的方法是按照@Derek Eden的建议使用pandas
。
您走在正确的轨道上。尝试这些调整:
.isoformat()
。int()
确保range()
以整数而不是浮点数。这应该起作用:
import datetime as dt
t1 = dt.datetime(2001, 10, 10)
t2 = dt.datetime(2001, 10, 15)
isotimes = [
(t1 + dt.timedelta(minutes=minutes)).isoformat()
for minutes in range(int((t2 - t1).total_seconds() // 60))
]
您还可以使用像pandas
这样的大库,尽管那样会在导入时造成时间损失。