使用列表推导和日期时间在python中生成时间列表

问题描述 投票:0回答:3

我正在尝试创建一个列表,该列表是通过使用以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()

这是半正确的吗?

python datetime list-comprehension iso8601 timedelta
3个回答
1
投票

认为使用熊猫可能会更容易:

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']

0
投票

您需要将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


0
投票

您走在正确的轨道上。尝试这些调整:

  • 在理解中使用.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这样的大库,尽管那样会在导入时造成时间损失。

© www.soinside.com 2019 - 2024. All rights reserved.