【问题标题】:How can I replace datetime with While loop in Python如何在 Python 中用 While 循环替换日期时间
【发布时间】:2021-11-18 20:43:16
【问题描述】:
from datetime import datetime
from datetime import timedelta

dateIs = datetime.today()
thisDay = datetime.strftime(dateIs, "%d")
thisDayInt = int(thisDay)
dateListTest = []
if(thisDayInt > 0):
    while thisDayInt > 1:
        thisDayInt -= 1
        dateIs.replace(day=thisDayInt,hour=0,minute=0,second=0)
        dateListTest.append(dateIs)
    
    print(dateListTest)

输出

[datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371), 
datetime.datetime(2021, 11, 18, 23, 38, 23, 687371)] 

我在这部分要做的是逐个获取从今天到月初的天数列表,但是当我将它们放入 While 循环时,我无法按递减方式打印天数。我不知道更短的路径或我要跳过的地方。

【问题讨论】:

  • 您每次都附加相同的dateIs。你知道dateIs.replace 是否有回报吗?也许你应该追加它返回的内容。
  • dateIs 只返回2021-11-18 23:56:21.562025

标签: python loops datetime while-loop


【解决方案1】:

列表理解

您可以为此使用列表推导。

from datetime import datetime

dateIs = datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
thisDay = dateIs.day

dateListTest = [dateIs.replace(day=d) for d  in range(thisDay-1, 0, -1)]

print(dateListTest)
[datetime.datetime(2021, 11, 17, 0, 0), 
 datetime.datetime(2021, 11, 16, 0, 0), 
 datetime.datetime(2021, 11, 15, 0, 0), 
 datetime.datetime(2021, 11, 14, 0, 0), 
 datetime.datetime(2021, 11, 13, 0, 0), 
 datetime.datetime(2021, 11, 12, 0, 0), 
 datetime.datetime(2021, 11, 11, 0, 0), 
 datetime.datetime(2021, 11, 10, 0, 0), 
 datetime.datetime(2021, 11, 9, 0, 0), 
 datetime.datetime(2021, 11, 8, 0, 0), 
 datetime.datetime(2021, 11, 7, 0, 0), 
 datetime.datetime(2021, 11, 6, 0, 0), 
 datetime.datetime(2021, 11, 5, 0, 0), 
 datetime.datetime(2021, 11, 4, 0, 0), 
 datetime.datetime(2021, 11, 3, 0, 0), 
 datetime.datetime(2021, 11, 2, 0, 0), 
 datetime.datetime(2021, 11, 1, 0, 0)]

熊猫

您也可以使用来自Pandasdate_range 来执行此操作,但您最终会得到一个 datetime.date 而不是 datetime.datetime 的列表。

from datetime import datetime
import pandas as pd

dateIs = datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
thisDay = dateIs.day

dateListTestPandas =pd.date_range(start=dateIs.replace(day=thisDay-1), end=dateIs.replace(day=1), freq="-1D").date.tolist()

print(dateListTestPandas)
[datetime.date(2021, 11, 17), 
 datetime.date(2021, 11, 16), 
 datetime.date(2021, 11, 15), 
 datetime.date(2021, 11, 14), 
 datetime.date(2021, 11, 13), 
 datetime.date(2021, 11, 12), 
 datetime.date(2021, 11, 11), 
 datetime.date(2021, 11, 10), 
 datetime.date(2021, 11, 9), 
 datetime.date(2021, 11, 8), 
 datetime.date(2021, 11, 7), 
 datetime.date(2021, 11, 6), 
 datetime.date(2021, 11, 5), 
 datetime.date(2021, 11, 4), 
 datetime.date(2021, 11, 3), 
 datetime.date(2021, 11, 2), 
 datetime.date(2021, 11, 1)]

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2016-08-01
    相关资源
    最近更新 更多