我需要从当前日期加7天减去一个基准日期;但不确定如何处理年份的变化?

2024-04-16 19:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

PaymentDate = datetime.now().timetuple().tm_yday + 7
NS_Date_Text = driver.find_element(By.ID, "custrecord_ps_inv_date_val").text
basedate = datetime.strptime(NS_Date_Text, '%m/%d/%Y')
basedate1 = datetime.timetuple(basedate).tm_yday
DaysUntilPayment = PaymentDate - basedate1

到目前为止,本规范适用于2019年。但是,我不知道如何计算2020年或2018年

因此,我将当前日期转换为一年中的天数(1月1日为1,12月31日为365/366),然后在该数字上加上7。这是付款日期。你知道吗

然后,我在网页上找到一个日期(BaseDate),并将该数字转换为一年中的某一天。你知道吗

然后减去这两个数字。你知道吗

如果当前日期是:2020年1月10日(第10天)+7=第17天,我不确定它的效果如何。但基准日是2019年12月28日(362天)。你知道吗

我将得到的数字是345,这太超前了,而我需要的数字(DaysUntilPayment)是20。你知道吗

我希望我能解释清楚。如果你有任何问题,请回答!你知道吗


Tags: textdatetimedatedriver数字findnowtm
1条回答
网友
1楼 · 发布于 2024-04-16 19:32:29

你让这条路变得更复杂了。Python的datetime.date()对象知道如何处理delta本身;如果减去两个date()对象,就会得到一个^{} instance,它有一个.days属性。你知道吗

接下来,您可以创建自己的timedelta()对象,将7天添加到“今天”:

from datetime import date, timedelta

# 7 days from today
payment_date = date.today() + timedelta(days=7)

# find base date on the webpage
ns_date_text = driver.find_element(By.ID, "custrecord_ps_inv_date_val").text
basedate = datetime.strptime(ns_date_text, '%m/%d/%Y').date()

# calculate the difference in days between these two dates
# date - date = timedelta, so take the .days attribute from that result
days_until_payment = (payment_date - basedate).days

注意,我只使用了datetime.strptime()结果的日期组件。您也可以使用datetime对象来完成所有这些,但是您可能需要担心时区之类的问题,不必这样做就更容易了。你知道吗

这些操作会处理一些细节,例如处理年份,更重要的是,处理闰年:

>>> from datetime import date, datetime, timedelta
>>> payment_date = date(2020, 2, 22) + timedelta(days=7)
>>> payment_date   # this is February 29th, a leap day!
datetime.date(2020, 2, 29)
>>> basedate = datetime.strptime("12/31/2019", '%m/%d/%Y').date  # last day of 2019
>>> payment_date - basedate
datetime.timedelta(days=60)
>>> (payment_date - basedate).days  # February 29th is 60 days later
60

有关更多详细信息,请参见^{} documentation,它有一个支持的操作部分,包括:

date2 = date1 + timedelta
date2 is timedelta.days days removed from date1

timedelta = date1 - date2
This is exact, and cannot overflow. timedelta.seconds and timedelta.microseconds are 0, and date2 + timedelta == date1 after.

相关问题 更多 >