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

Python:比较日期并打印出第一个日期,python,datetime,date,strftime,Python,Datetime,Date,Strftime,这可能非常简单,但我是python的初学者,我想通过提示用户输入MM-DD格式的日期来比较生日日期。没有年份,因为年份是当前年份(2011年)。然后,它将提示用户输入另一个日期,然后程序将其进行比较,以确定哪一个是第一个。然后打印出前一天的日期,这是工作日的名称 示例:02-10早于03-11。 02-10在周四,03-11在周五 我刚刚开始学习模块,我知道我应该使用datetime模块,一个日期类和strftime来获取工作日名称。我真的不知道如何把它放在一起 如果有人能帮我开始,那真的很有帮

这可能非常简单,但我是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"  
导入日期时间
def getDate():
尽管如此:
生日1=原始输入(“请输入您的生日(MM-DD):”)
尝试:
userInput=datetime.date.strftime(生日1,“%m-%d”)
除:
打印“请输入日期”
返回用户输入
生日2=原始输入(“请输入另一个日期(MM-DD):”)
如果生日1>生日2:
打印“生日1较旧”
elif生日1<生日2:
打印“生日2较旧”
其他:
打印“同龄”

嗯,datetime.date.strftime需要datetime对象而不是字符串

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

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
如果d1
嗯,datetime.date.strftime需要datetime对象而不是字符串

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

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
如果d1
有两个主要函数用于在日期对象和字符串之间进行转换:
strftime
strptime

strftime用于格式化。它返回一个字符串对象。 strtime用于解析。它返回一个datetime对象

更多信息

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


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

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

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

strftime用于格式化。它返回一个字符串对象。 strtime用于解析。它返回一个datetime对象

更多信息

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


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

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

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

  • 缩进被破坏了,但我想这可能只是将其粘贴到堆栈溢出中的问题
  • strftime
    用于格式化时间,而不是解析时间。你想要的是
  • 在Python中,
    True
    有一个大写的
    T
  • 您正在定义
    getDate
    函数,但从未使用过它
  • 您永远不会退出
    while
    循环,因为在成功获取输入后,您不会
    中断
  • 在Python中,对变量和方法名使用“驼峰大小写”被认为是不好的风格
  • 你用“年长”这个词来指代日期,但如果没有年份,你就不能说一个人是否比另一个人年长
  • 您可以捕获在尝试解析日期时引发的任何异常,但不显示该日期或检查其类型。这是一个坏主意,因为如果您在那一行上输入了一个变量名(或类似的打字错误),您将看不到错误
下面是修复这些问题的代码的重写版本-我希望从上面可以清楚地看出我进行这些更改的原因:

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"
导入日期时间
def get_日期(提示):
尽管如此:
用户输入=原始输入(提示)
尝试:
user\u date=datetime.datetime.strtime(用户输入,“%m-%d”)
打破
例外情况除外,如e:
打印“出现错误:”,e
打印“请输入日期”
返回用户_date.date()
生日=获取日期(“请输入您的生日(MM-DD):”)
另一个日期=获取日期(“请输入另一个日期(MM-DD):”)
如果生日>另一个日期:
打印“生日在其他日期之后”
elif生日<另一个日期:
打印“生日早于其他日期”
其他:
打印“两个日期相同”

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

  • 缩进被破坏了,但我想这可能只是将其粘贴到堆栈溢出中的问题
  • strftime
    用于格式化时间,而不是解析时间。你想要的是
  • 在Python中,
    True
    有一个大写的
    T
  • 您正在定义
    getDate
    函数,但从未使用过它
  • 您永远不会退出
    while
    循环,因为在成功获取输入后,您不会
    中断
  • 在Python中,对变量和方法名使用“驼峰大小写”被认为是不好的风格
  • 你用“年长”这个词来指代日期,但如果没有年份,你就不能说一个人是否比另一个人年长
  • 您可以捕获在尝试解析日期时引发的任何异常,但不显示该日期或检查其类型。这是个坏主意,因为如果您在tha上输入了一个变量名(或类似的打字错误)