【问题标题】:Running Function on all Items in a List (Converting List of Dates to Unix Timestamp)对列表中的所有项目运行函数(将日期列表转换为 Unix 时间戳)
【发布时间】:2021-12-18 00:47:02
【问题描述】:

我一直在试图找出我的 for 循环出了什么问题。为什么这会在所有 UNIX 日期变量中附加相同的 UNIX 时间戳?

now = datetime.datetime.today()
dates = []
for x in range(7):
    d = now - timedelta(days=x)
    dates.append(d.strftime("%Y/%m/%d"))
print(dates)
unixdates = []
for date in dates:
    e = time.mktime(datetime.datetime.strptime(datetime.date.today().strftime("%m/%d/%Y"), '%m/%d/%Y').timetuple())
    unixdates.append(e)
print(unixdates)

这是输出:

['2021/11/03', '2021/11/02', '2021/11/01', '2021/10/31', '2021/10/30', '2021/10/29', '2021/10/28']
[1635912000.0, 1635912000.0, 1635912000.0, 1635912000.0, 1635912000.0, 1635912000.0, 1635912000.0]

【问题讨论】:

    标签: python datetime timestamp


    【解决方案1】:

    因为您一遍又一遍地使用相同的日期,这将始终给出相同的 UNIX 时间(datetime.date.today()datetime 是此处的日期时间模块)。

    通过使用datetime.timestamp 方法来获取 UNIX 时间来简化您的代码:

    from datetime import datetime, timedelta
    
    today = datetime.now().date()
    dates, unixdates = [], []
    
    for x in range(7):
        d = today - timedelta(days=x)
        dates.append(d.strftime("%Y/%m/%d"))
        unixdates.append(datetime.combine(d, datetime.min.time()).timestamp())
    
    print(dates)
    print(unixdates) # my machine is on UTC+1
    # ['2021/11/03', '2021/11/02', '2021/11/01', '2021/10/31', '2021/10/30', '2021/10/29', '2021/10/28']
    # [1635894000.0, 1635807600.0, 1635721200.0, 1635631200.0, 1635544800.0, 1635458400.0, 1635372000.0]
    

    还要注意你在这里使用naive datetime,如果你不设置 tz 参数,它将假定当地时间,例如

    today = datetime.now(timezone.utc)
    

    获取 UTC。

    【讨论】:

    • 哇,谢谢。这就像一个魅力
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2020-10-19
    • 2020-12-23
    相关资源
    最近更新 更多