Python 如何让用户输入日期并从中减去

Python 如何让用户输入日期并从中减去,python,python-2.7,Python,Python 2.7,我想要的是用户输入一个选定的日期,然后从当前日期中减去该日期,然后根据结果创建一个睡眠计时器 from datetime import tzinfo, timedelta, datetime def ObtainDate(): isValid=False while not isValid: userIn = raw_input("Type Date: mm/dd/yy: ") try: d1 = datetime.date

我想要的是用户输入一个选定的日期,然后从当前日期中减去该日期,然后根据结果创建一个睡眠计时器

from datetime import tzinfo, timedelta, datetime
def ObtainDate():
    isValid=False
    while not isValid:
        userIn = raw_input("Type Date: mm/dd/yy: ")
        try:
            d1 = datetime.datetime.strptime(userIn, "%m/%d/%y")
            isValid=True
        except:
            print "Invalid Format!\n"
    return d1

t = (datetime.now() - d1).seconds

我当前的代码看起来是这样的,但我不知道如何获取d1并从中减去当前日期。

因为您正在使用

from datetime import tzinfo, timedelta, datetime
您不再以该名称导入整个datetime模块,而是将单个类直接导入脚本的命名空间。因此,您的输入解析语句应该如下所示:

d1 = datetime.strptime(userIn, "%m/%d/%y")  # You are no longer
以下内容将显示现在与输入时间之间的秒差:

t = (datetime.now() - d1).total_seconds()
至于第二部分,有很多方法可以实现计时器。一个简单的方法是

import time
time.sleep(t)
编辑 以下是全部内容:

from datetime import tzinfo, timedelta, datetime

def ObtainDate():
    isValid=False
    while not isValid:
        userIn = raw_input("Type Date: mm/dd/yy: ")
        try:
            d1 = datetime.strptime(userIn, "%m/%d/%y")
            isValid=True
        except:
            print "Invalid Format!\n"
    return d1

t = (ObtainDate() - datetime.now()).total_seconds()
print t

您的代码有几个简单的错误。这个版本可以工作(虽然我不确定你到底需要什么,但它应该能帮你解决眼前的问题)


你的主要问题是你没有调用你的函数。我还将while循环简化为无限循环。return语句将中断循环,除非它引发错误。

Hmm。。。不再允许我输入日期,我收到了以下错误AttributeError:type对象“datetime.datetime”没有属性“datetime”@Argutus您确定您的导入语句是
import datetime
而不是
from datetime import datetime
?如果你真的在做后者,那么你需要
t=(datetime.now()-d1).秒来代替。是的,我把它抄错了,并且更新了OP。它现在跳过了用户输入,你知道为什么吗?@Argutus是的-你改变了导入datetime的方式,这改变了名称空间,因此,您必须更改引用导入类的方式。我将更新答案。即使使用您的解决方案,用户输入仍会中断。对不起,我不是想让你完全自己写代码,我只是很容易弄糊涂,因为我只写了一天的代码。你在找这样的东西吗?为什么
获取日期
函数的末尾仍然有
返回d1
?它永远不会被访问,但如果它被访问,将导致引发
namererror
from datetime import datetime

def ObtainDate():
    while True:
        userIn = raw_input("Type Date: mm/dd/yy: ")
        try:
            return datetime.strptime(userIn, "%m/%d/%y")
        except ValueError:
            print "Invalid Format!\n"

t0 = datetime.now()
t1 = ObtainDate()
td = (t1 - t0)

print t0
print t1
print td
print td.total_seconds()