python - 对列表中的所有项目运行函数(将日期列表转换为 Unix 时间戳)
问题描述
我一直试图弄清楚我的 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]
解决方案
因为您一遍又一遍地使用相同的日期,这将始终给出相同的 UNIX 时间(这里datetime.date.today()
是datetime
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]
另请注意,您在这里使用天真的日期时间,如果您不设置 tz 参数,它将假定为本地时间,例如
today = datetime.now(timezone.utc)
获取UTC。
推荐阅读
- javascript - 特定字段的值未在 for 循环中更新
- android - 在循环中动态创建视图(textView、imageVIew 等)会挂起 Android 设备。如何解决这个问题?
- javascript - 光滑的灯箱使用图像标题作为标题
- sql - 选择每个联系人的最早日期
- lean - 如何在 Emacs 中为 Lean 2 切换到 HoTT 模式
- nhibernate - 是否可以根据 NHibernate 多列用户类型订购查询,最好是通过 QueryOver?
- python - 如何提高嵌套 try-except-else 子句中的代码清晰度?
- node.js - API 在将数据放入 dynamoDB 时随机工作
- java - 如何根据来自 ajax 的弹出窗口或对话框的输入来执行控制器
- php - 如何在学说中生成此查询?