我有一个文件,其中日期字段为YYYYMMDD
格式。我需要减去12个月来选择其他产品的日期和产品,以获取其他信息。
文件1
20180131,Apple
20180228,Orange
20180331,Grapes
文件2
20170131,Apple,45
20170131,Orange,20
20170228,Orange,35
20170331,Apple,25
输出
20180131,Apple,45
20180228,Orange,35
20180331,Grapes,null
如何从给定日期(yyyymmdd)中减去12个月或1年,并以相同的格式获得答案。
答案 0 :(得分:-1)
您可以使用标准库中的strptime
来解析日期,但是不幸的是,标准库中没有日历支持,因此您必须使用dateutil库来减去年份。
import datetime
from dateutil.relativedelta import relativedelta
d = datetime.datetime.strptime('20180131', '%Y%m%d').date()
print((d - relativedelta(years=1)).strftime('%Y%m%d'))
这将打印20170131。
请注意,如果输入是20160229,它将打印出来20150228。我不确定relativedelta
的语义到底是什么,因此如果这对您很重要,请务必阅读文档。
datetime.timedelta
是不合适的,不能正常工作。 timedelta
代表时间的持续时间,或者代表天数,但是与直觉相反,一年不是持续时间,而是日历的概念。一年是365天或366天,具体取决于哪一年。
很明显,一旦找到正确的测试用例,timedelta
将不起作用:
In [1]: from datetime import date, timedelta In [2]: date(2018, 1, 1) - timedelta(365) Out[2]: datetime.date(2017, 1, 1) In [3]: date(2017, 1, 1) - timedelta(365) Out[3]: datetime.date(2016, 1, 2)