Python:比较日期并打印出第一个

2024-09-27 23:18:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能很简单,但我是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"  

Tags: 模块用户datetimedate名字ddmmprint
3条回答

在你发布的代码中我可以看到一些问题。我希望指出其中一些内容会有所帮助,并提供一个稍微重写的版本:

  • 缩进已损坏,但我想这可能只是粘贴到堆栈溢出的问题
  • strftime用于格式化次,而不是解析它们。你想要^{}。在
  • 在Python中,True有一个大写的T。在
  • 您定义了getDate函数,但从未使用过它。在
  • 您永远不会退出while循环,因为您在成功获得输入后不会break。在
  • 在Python中,对变量和方法名使用“camel case”被认为是不好的风格。在
  • 你用“年长”这个词来指代日期,但是没有年份,你就不能说一个人是否比另一个人老。在
  • 当您尝试解析日期时,您可以捕捉到任何抛出的异常,但不要显示它或检查它的类型。这是个坏主意,因为如果你在那一行输入了错误的变量名(或类似的错误),你就不会看到错误。在

下面是您的代码的重写版本,它修复了这些问题—我希望从上面可以清楚地看出我为什么要做这些更改:

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"

嗯,日期时间。日期。时间需要日期时间对象而不是字符串。在

在您的情况下,最好是手动创建日期:

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

当你有两个日期,日期1和日期2,你可以做:

^{pr2}$

有两个主要函数用于在日期对象和字符串之间进行转换:strftime和{}。在

strftime用于格式化。它返回一个字符串对象。 strptime用于解析。它返回一个日期时间对象。在

更多信息in the docs。在

因为您需要的是一个datetime对象,所以您需要使用strptime。您可以按如下方式使用它:


>>> datetime.datetime.strptime('01-23', '%m-%d')
datetime.datetime(1900, 1, 23, 0, 0)

请注意,不解析年份将默认设置为1900。在

相关问题 更多 >

    热门问题