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