首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:比较日期并打印出第一个日期

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

Stack Overflow用户
提问于 2011-03-13 16:37:10
回答 3查看 3.4K关注 0票数 1

这可能非常简单,但我是python的初学者,我想通过提示用户以MM-DD格式输入日期来比较生日日期。没有年份,因为年份是当前年份(2011)。然后,它将提示用户输入另一个日期,然后程序将其进行比较,看看哪一个是第一个。然后它打印出较早的一天和它的星期名称。

示例: 02-10早于03-11。02-10是周四,03-11是周五

我刚开始学习模块,我知道我应该使用datetime模块、date类和strftime来获取工作日的名称。我真的不知道怎么把它们放在一起。

如果有人能帮我入门,那将会很有帮助!我有一些零碎的东西:

代码语言:javascript
运行
复制
 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"  
EN

回答 3

Stack Overflow用户

发布于 2011-03-13 17:03:58

在您发布的代码中,我可以看到一些问题。我希望这将有助于指出其中的一些,并提供一个稍微重写的版本:

Stack Overflow

  • strftime的缩进被打破了,但我猜这可能只是粘贴到
  • 中的问题,是为了格式化时间,而不是解析它们。你想要的是大写的大小写。在Python中,strptime有一个大写的T.
  • You're定义了

函数,但从未使用过它。

  • 你永远不会退出你的while循环,因为你在获得被认为风格不好的输入大小写之后,不会在Python中使用“驼峰大小写”作为变量和方法的名称。< break >H219<代码>H120你在引用日期时使用了单词“getDate”,但是如果没有一年,你就不能判断一个人是否比另一个人大。
  • 当你试图解析日期时,你会捕捉到任何抛出的异常,但不显示它或检查它的类型。这不是一个好主意,因为如果您在该行输入了错误的变量名(或类似的拼写错误),您将看不到错误。

这里是你的代码的重写版本,它修复了这些问题--我希望从上面的内容中可以清楚地知道我为什么要做出这些改变:

代码语言:javascript
运行
复制
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"
票数 4
EN

Stack Overflow用户

发布于 2011-03-13 16:52:08

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

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

代码语言:javascript
运行
复制
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时,你可以这样做:

代码语言:javascript
运行
复制
if d1 < d2:
  # do things to d1, it's earlier
else:
  # do things to d2, it'2 not later
票数 1
EN

Stack Overflow用户

发布于 2011-03-13 16:56:15

有两个主要函数用于在date对象和字符串之间进行转换:strftimestrptime

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

更多信息in the docs

由于您需要的是datetime对象,因此您可能希望使用strptime。您可以按如下方式使用它:

代码语言:javascript
运行
复制
>>> datetime.datetime.strptime('01-23', '%m-%d')
datetime.datetime(1900, 1, 23, 0, 0)

请注意,如果不解析年份,则会将缺省值设置为1900。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5288329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档