Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中计算日期之间的天数(以月为单位)_Python_Date_Datetime_Calculator - Fatal编程技术网

在python中计算日期之间的天数(以月为单位)

在python中计算日期之间的天数(以月为单位),python,date,datetime,calculator,Python,Date,Datetime,Calculator,正如你们所看到的,这段代码中的一切都很好,但我的老师对我提出了挑战。他说你能用几个月内不寻常的日子写一个代码吗。例如:一月有31天,但我希望是41天等等 我现在该怎么办?(请不要说:将输出与10相加,因为用户输入可以更改,我应该在几个月内更改所有天数,这样就不起作用了) 我是编码爱好者,所以简单的解释会更好。 from datetime import datetime x = input("first date: ") y = input("second da

正如你们所看到的,这段代码中的一切都很好,但我的老师对我提出了挑战。他说你能用几个月内不寻常的日子写一个代码吗。例如:一月有31天,但我希望是41天等等

我现在该怎么办?(请不要说:将输出与10相加,因为用户输入可以更改,我应该在几个月内更改所有天数,这样就不起作用了)

我是编码爱好者,所以简单的解释会更好。


from datetime import datetime

x = input("first date: ")

y = input("second date: ")


a = datetime.strptime(x, "%Y/%m/%d")

b = datetime.strptime(y, "%Y/%m/%d")


result = (a-b).days


print("days: ",result)


# my first date is = 2021/2/8

# my second date is = 2021/1/24

# output = days : 15


您可以制作包含月份及其自定义日期的字典(例如,“1”:41表示包含41天的第一个月)。然后你需要做的就是把第一个月的输入日期加起来,减去当月的总天数和输入日期的天数。(假设第一个日期始终大于第二个日期)


我想你接近答案了。 您不想“将输出与10相加”,但为什么不呢? 这个问题的答案是“结果+额外天数”(所以输出的总和+偏移量)。 因此,您需要的偏移量不是“10”,而是maxDayOfMonth+/-requestedDate

是一个相关的帖子,提供获取任何月份最后一天的功能:

months = {
'1': 41,
'2': 38,
'3': 24,
...
...
'12': 45,
}

x = input("first date: ")
y = input("second date: ")

a = list(x.split('/'))
b = list(y.split('/'))

# 2021/2/8
# ['2021', '2', '8']

result = int(a[2]) + (months[b[1]] - int(b[2]))
print(result)
找到解决问题的方案总是有帮助的,例如:
您的老师发现一个月中的天数可变的替代宇宙,他想使用datetime库工作。:)

假设一月应该有41天,那么如果用户输入2021/01/33作为日期呢?啊,对了,那么他可以通过切片字符串来获取日期,而不是从datetime对象获取输入日期的天数,我猜在那个宇宙中,一些程序员可能会死于直接的脑癌。^^^^说真的:我在这里看到的问题是,
any_day
仍然是一个datetime对象,它无法处理2021-01-41这样的日期。我可以更清楚地说:使用每月的最后一天(any_day)来获得“正常”的最后一天。然后你可以通过用“假想的”最后一天减去返回值得到偏移量。
months = {
'1': 41,
'2': 38,
'3': 24,
...
...
'12': 45,
}

x = input("first date: ")
y = input("second date: ")

a = list(x.split('/'))
b = list(y.split('/'))

# 2021/2/8
# ['2021', '2', '8']

result = int(a[2]) + (months[b[1]] - int(b[2]))
print(result)
def last_day_of_month(any_day):
    # this will never fail
    # get close to the end of the month for any day, and add 4 days 'over'
    next_month = any_day.replace(day=28) + datetime.timedelta(days=4)
    # subtract the number of remaining 'overage' days to get last day of current month, or said programattically said, the previous day of the first of next month
    return next_month - datetime.timedelta(days=next_month.day)