这可能非常简单,但我是python的初学者,我想通过提示用户输入MM-DD格式的日期来比较生日日期。没有一年,因为今年是当年(2011年)。然后它会提示用户输入另一个日期,然后程序会比较它以查看哪个是第一个。然后它打印出较早的日期和它的工作日名称。
示例:02-10早于03-11。 02-10是星期四,03-11是星期五
我刚开始学习模块,我知道我应该使用datetime模块,日期类和strftime来获取工作日名称。我真的不知道怎么把它们放在一起。
如果有人可以帮助我开始这将真的有帮助!我有一些零碎的东西:
import datetime
def getDate():
while true:
birthday1 = raw_input("Please enter your birthday (MM-DD): ")
try:
userInput = datetime.date.strftime(birthday1, "%m-%d")
except:
print "Please enter a date"
return userInput
birthday2 = raw_input("Please enter another date (MM-DD): ")
if birthday1 > birthday2:
print "birthday1 is older"
elif birthday1 < birthday2:
print "birthday2 is older"
else:
print "same age"
答案 0 :(得分:4)
我在您发布的代码中可以看到一些问题。我希望指出其中的一些是有帮助的,并提供一个有点重写的版本:
strftime
用于格式化次,而不是解析它们。您想要strptime
代替。True
有一个大写T
。getDate
功能但从不使用它。while
循环,因为在成功输入后您没有break
。这是您的代码的重写版本,修复了这些问题 - 我希望从上面可以清楚地看到我做出这些更改的原因:
import datetime
def get_date(prompt):
while True:
user_input = raw_input(prompt)
try:
user_date = datetime.datetime.strptime(user_input, "%m-%d")
break
except Exception as e:
print "There was an error:", e
print "Please enter a date"
return user_date.date()
birthday = get_date("Please enter your birthday (MM-DD): ")
another_date = get_date("Please enter another date (MM-DD): ")
if birthday > another_date:
print "The birthday is after the other date"
elif birthday < another_date:
print "The birthday is before the other date"
else:
print "Both dates are the same"
答案 1 :(得分:1)
嗯,datetime.date.strftime需要datetime对象而不是string。
在您的情况下,最好的方法是手动创建日期:
import datetime
...
birthday1 = raw_input("Please enter your birthday (MM-DD): ")
try:
month, day = birthday1.split('-')
date1 = datetime.date(2011, int(month), int(day))
except ValueError as e:
# except clause
# the same with date2
然后当你有两个日期,date1和date2时,你可以这样做:
if d1 < d2:
# do things to d1, it's earlier
else:
# do things to d2, it'2 not later
答案 2 :(得分:1)
有两个主要函数用于在日期对象和字符串之间进行转换:strftime
和strptime
。
strftime用于格式化。它返回一个字符串对象。 strptime用于解析。它返回一个datetime对象。
更多信息in the docs。
因为你想要的是一个日期时间对象,你会想要使用strptime。您可以按如下方式使用它:
>>> datetime.datetime.strptime('01-23', '%m-%d')
datetime.datetime(1900, 1, 23, 0, 0)
请注意,没有解析年份会将默认值设置为1900。