计算用户输入的两个日期之间的剩余天数
我想要计算用户输入日期但不能找到如何去做的两个日期之间的天数。目前,我有这样的代码:计算用户输入的两个日期之间的剩余天数
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)
谢谢
您正在错误地使用datetime
构造函数。我修改了解决方案,以简单和易于管理的方式处理用户输入。一个基本的数据验证由datetime.strptime factory method进行,但可能有更多的(例如检查,例如,结束日期总是开始日期后自带):
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)
我比了几个测试做多,这是什么导致:
[email protected]:~$ 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
在Python中,input()
方法接受输入作为一个字符串变量。然后,您可以使用int()
方法将其转换为整数。但是你不能绑定整个元组。即(年,月,日)。 您可以通过逐个获取所有值来完成。
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)
希望有所帮助。
这个答案本质上并不是错误的,但它不会通过检查月份日期超出范围来执行数据验证,例如。 [日期时间](https://docs.python.org/release/3.6.2/library/datetime.html#strftime-and-strptime-behavior)模块记录了更多标准和可靠的实现方式。 – none
我认为你最大的问题是你如何检索日期。 date()函数需要三个整数,例如日期(2017,10,10)
当您使用的输入(),你得到一个字符串:
input() #returns a string
您还需要通过某种方式拆分输入来解决这个:
例如
"2017-10-12".split("-") # returns ["2017","10","12"]
[int(i) for i in "2017-10-12".split("-")] # returns [2017,10,12]
这意味着,如果你这样做,你会得到一个日期:
date(*[int(i) for i in input("When is your deadline?").split("-")])
但你真的想在这种情况下,什么是使用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
推荐链接
的各种样的:Strptime()定义它的外观一个字符串转换为datetime格式化字符串的方法: https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
您目前有此代码...和,什么? – SiHa
https://stackoverflow.com/questions/8419564/difference-between-two-dates – Marco