python - 如何使用timedelta python从可变日期中减去可变天数
问题描述
我有一个具有这种格式的原始日期的数据集:
End_date=['Fri, 19 Aug 2011 19:28:17 -0000', 'Sun, 08 Apr 2012 02:14:00 -0000',
'Wed, 22 Jun 2011 13:33:00 -0000', 'Fri, 30 Dec 2011 04:36:53 -0000'....]
Duration_in_days=[30, 20, 10, 15,....]
如何使用循环、日期时间和时间增量从 End_date 中减去持续时间以得出开始日期?
解决方案
下面的程序展示了如何做到这一点,减去天数,最后得到一个基于字符串的集合:
# Need pprint for pretty printing of lists.
import time, datetime, pprint
# Set up test data.
End_date=[
'Fri, 19 Aug 2011 19:28:17 -0000',
'Sun, 08 Apr 2012 02:14:00 -0000',
'Wed, 22 Jun 2011 13:33:00 -0000',
'Fri, 30 Dec 2011 04:36:53 -0000',
]
Duration_in_days=[30, 20, 10, 15]
fmt = "%a, %d %b %Y %H:%M:%S %z"
# Add each (adjusted) item to a new list.
Start_date = []
for i in range(len(End_date)):
# Parse end date, subtract and create string from it.
dt = datetime.datetime.strptime(End_date[i], fmt)
dt -= datetime.timedelta(days=Duration_in_days[i])
Start_date.append(datetime.datetime.strftime(dt, fmt))
pprint.pprint(End_date)
pprint.pprint(Start_date)
而且,尽管您的评论相反,2011 年 7 月 20 日是星期三 :-)
输出显示原始时间和调整后的时间:
['Fri, 19 Aug 2011 19:28:17 -0000',
'Sun, 08 Apr 2012 02:14:00 -0000',
'Wed, 22 Jun 2011 13:33:00 -0000',
'Fri, 30 Dec 2011 04:36:53 -0000']
['Wed, 20 Jul 2011 19:28:17 +0000',
'Mon, 19 Mar 2012 02:14:00 +0000',
'Sun, 12 Jun 2011 13:33:00 +0000',
'Thu, 15 Dec 2011 04:36:53 +0000']
如果您追求更 Pythonic 的方式:-),则可以将循环替换为:
Start_date = [datetime.datetime.strftime(datetime.datetime.strptime(dt, fmt) - datetime.timedelta(days=delta), fmt) for dt, delta in zip(End_date, Duration_in_days)]
推荐阅读
- libgdx - font.draw() 在第一次调用时正常工作,但在第二次调用时不能正常工作
- image - Libgdx 着色器加过滤器
- spring-boot - 没有 OAuth 的 Spring 安全 JWT
- wordpress - 按以字符开头的术语过滤 tax_query
- java - 将 ArrayList 值传输到另一个 ArrayList 但每个值都与 String 连接
- javascript - HTML 表单转 JSON
- spring - 是否有任何针对嵌入式数据存储的 Spring Boot Data Reactive Starter?
- c - 在文本文件中读取最多两行的问题,C
- sql - 在 case 语句问题中使用 when exists
- c - 在 C 中分配 2D 字符矩阵的奇数输出