Python 计算用户输入的两个日期之间的剩余天数

Python 计算用户输入的两个日期之间的剩余天数,python,datetime,time,Python,Datetime,Time,我试图计算两个日期之间的天数,其中用户正在输入日期,但找不到如何操作。我目前有以下代码: from datetime import date startdate = date(input("When do you intend to start?")) enddate = date(input("When is your deadline?")) numstudydays = enddate - startdate print (numstudydays) 谢谢在python中,input(

我试图计算两个日期之间的天数,其中用户正在输入日期,但找不到如何操作。我目前有以下代码:

from datetime import date

startdate = date(input("When do you intend to start?"))
enddate = date(input("When is your deadline?"))
numstudydays = enddate - startdate
print (numstudydays)
谢谢

在python中,
input()
方法将输入作为字符串变量接受。然后,可以使用
int()
方法将其类型转换为整数。但不能对整个元组进行类型转换。i、 e(年、月、日)。 您可以通过逐个获取所有值来实现

from datetime import date

print("Enter intended start date details: ")
year = int(input('Year: '))
month = int(input('Month: '))
day = int(input('Day: '))
startdate = date(year, month, day)

print("Enter intended enddate details: ")
year = int(input('Year: '))
month = int(input('Month: '))
day = int(input('Day: '))
enddate = date(year, month, day)
numstudydays = enddate - startdate

print (numstudydays)

希望有帮助

我认为你最大的问题是如何检索日期。 date()函数需要三个整数,例如date(2017,10,10)

使用input()时,会得到一个字符串:

input()  #returns a string
您还需要通过以某种方式拆分输入来解决此问题:

e、 g

这意味着如果你这样做,你会得到一个日期:

date(*[int(i) for i in input("When is your deadline?").split("-")])
但在这种情况下,您真正想要的是使用strtime。Strptime()通过定义字符串的外观将其转换为日期时间:

from datetime import datetime
datetime.strptime("20171012","%Y%m%d").date() # returns: datetime.date(2017, 10, 12)

完整脚本示例

from datetime import datetime

startdate_str = input("When do you intend to start? e.g.(2017-10-10)")
enddate_str = input("When is your deadline? e.g.(2017-10-11)")

startdate_dt = datetime.strptime(startdate_str,"%Y-%m-%d").date()
enddate_dt = datetime.strptime(enddate_str,"%Y-%m-%d").date()

numstudydays = enddate_dt - startdate_dt

print (numstudydays.days) # prints 1 for example inputs
推荐链接

格式化字符串的各种方法:

您不正确地使用了
datetime
构造函数。我修改了您的解决方案,以简单易管理的方式处理用户输入。基本数据验证由执行,但可能还有更多(例如,检查结束日期是否总是在开始日期之后):

从日期时间导入日期时间,日期
开始,结束=无,无
“开始”为“无”:
rawinput=input(“您打算什么时候开始?”)
尝试:
#%Y表示完全指定的年份,如2017年、1994年等。
#%m表示月份的整数表示,例如01、06、12
#以及月日的%d
#看https://docs.python.org/3/library/time.html#time.strftime 更多
start=datetime.strtime(原始输入,“%Y%m%d”)
除值错误外:
打印(“输入必须为\“\”)
虽然结束是无的:
rawinput=input(“您的截止日期是什么时候?”)
尝试:
end=datetime.strtime(原始输入,“%Y%m%d”)
除值错误外:
打印(“输入必须为\“\”)
差异=结束-开始
打印(“您有%d天的时间”%diff.days)
我做了不止两次测试,结果如下:

None@vacuum:~$ python3.6 ./test.py 
When do you intend to start? 2017 01 32
Input must be "<year number> <month number> <day number>"
When do you intend to start? 2017 01 31
When is your deadline? 2017 02 30
Input must be "<year number> <month number> <day number>"
When is your deadline? 2017 02 28
You have 28 days of time
None@vacuum:~$python3.6./test.py
你打算什么时候出发?2017 01 32
输入必须为“”
你打算什么时候出发?2017 01 31
你的截止日期是什么时候?2017 02 30
输入必须为“”
你的截止日期是什么时候?2017 02 28
你有28天的时间

您当前有此代码。。。还有,什么?这个答案本身并没有错,但它不会通过检查月天数是否超出范围来执行数据验证。本模块记录了实现这一目标的更多标准和经验证的方法。
from datetime import datetime, date

start, end = None, None

while start is None:
    rawinput = input("When do you intend to start? ")

    try:
        # %Y stands for a fully specified year, such as 2017, 1994, etc.
        # %m for the integer representation of a month, e.g. 01, 06, 12
        # and %d for the day of the month
        # see https://docs.python.org/3/library/time.html#time.strftime for more
        start = datetime.strptime(rawinput, "%Y %m %d")
    except ValueError:
        print("Input must be \"<year number> <month number> <day number>\"")

while end is None:
    rawinput = input("When is your deadline? ")

    try:
        end = datetime.strptime(rawinput, "%Y %m %d")
    except ValueError:
        print("Input must be \"<year number> <month number> <day number>\"")

diff = end - start

print("You have %d days of time" % diff.days)
None@vacuum:~$ python3.6 ./test.py 
When do you intend to start? 2017 01 32
Input must be "<year number> <month number> <day number>"
When do you intend to start? 2017 01 31
When is your deadline? 2017 02 30
Input must be "<year number> <month number> <day number>"
When is your deadline? 2017 02 28
You have 28 days of time