【问题标题】:Difference between two dates (datetime)两个日期之间的差异(日期时间)
【发布时间】:2020-05-03 02:23:30
【问题描述】:

我正在尝试用 Python 编写一个程序来计算两个日期之间的天数。

我收到用户的输入,格式为 May 2 2020。我知道我应该首先将字符串解析为日期,但我不知道该怎么做。请帮帮我。

这是我尝试过的程序:

from datetime import date

first_date(input)
sec_date(input)
con_date = datetime.strptime(first_date, '%d %m %Y').date()
con_date2 = datetime.strptime(first_date, '%d %m %Y').date()
delta = con_date2 - con_date
print(delta)

如果我以字符串 May 2 2020 的形式输入 first_date 和 Jun 30 2020 的 sec_date,我如何将此字符串转换为日期格式?注意:输入只能以上述格式给出。

上面的代码不适用于我将字符串转换为日期。请帮我把它转换成日期,并找出 sec_date 到 first_date 之间的天数。

【问题讨论】:

    标签: python date difference python-datetime


    【解决方案1】:

    您可以使用适当的strptime format 简单地解析时间。

    然后,一旦你获得了两个 date 对象,你就可以简单地将它们相减:

    import datetime 
    
    d1_str = "Apr 29 2020"
    d2_str = "May 7 2020"
    
    fmt = "%b %d %Y"
    
    d1 = datetime.datetime.strptime(d1_str, fmt).date()
    d2 = datetime.datetime.strptime(d2_str, fmt).date()
    
    delta = d2 - d1
    print(delta)
    print(delta.days)
    

    输出是:

    6 days, 0:00:00
    6
    

    【讨论】:

    • @NicolasM 应该做什么来接受 YYYY 和 YY 格式的年份。像 2019 年和 19 年
    【解决方案2】:
    from datetime import datetime
    
    first_date = "May 2 2020"
    sec_date = "Jun 30 2020"
    con_date = datetime.strptime(first_date, '%b %d %Y').date()
    con_date2 = datetime.strptime(sec_date, '%b %d %Y').date()
    delta = con_date2 - con_date
    print(delta.days)
    

    【讨论】:

    • 太棒了。谢谢
    • 应该怎么做才能同时接受 YYYY 和 YY 格式的年份。像 2019 年和 19 年
    • @AshokKumar 将大写的 %Y 替换为小写的 %y
    • 我不确定这是否会同时接受这两种格式,但这就是您在两种格式之间切换的方式。如果可能,您应该以相同的方式格式化所有用户输入。或者您可以检查年份的格式是 YYYY 还是 YY,然后相应地操作输入。
    • @AshokKumar 你知道如何接受这两种年份格式吗?
    【解决方案3】:

    这应该会有所帮助

    import datetime
    
    str = "May 2 2020"
    str2 = "June 30 2020"
    #convert str of month to int
    str = str.split(" ")
    str2 = str2.split(" ")
    month_name = str[0]
    month_name2 = str2[0]
    
    try:
        datetime_object = datetime.datetime.strptime(month_name, "%B")
    except ValueError:
        datetime_object = datetime.datetime.strptime(month_name, "%b")
    month_number = datetime_object.month
    
    try:
        datetime_object = datetime.datetime.strptime(month_name2, "%B")
    except ValueError:
        datetime_object = datetime.datetime.strptime(month_name2, "%b")
    month_number2 = datetime_object.month
    
    #find number of days between dates
    
    d0 = datetime.date(int(str[2]), month_number, int(str[1]))
    d1 = datetime.date(int(str2[2]), month_number2, int(str2[1]))
    delta = d1 - d0
    print(delta.days)
    

    【讨论】:

    • 非常适合像我这样的新手逐步学习的程序。谢谢。
    【解决方案4】:

    这是一种应用方法,它将采用开始日期和结束日期作为参数,返回它们之间的天差。 希望对您有所帮助。

    from datetime import date
    import time
    
    first_date = input("Enter First Date: ").split(" ")
    sec_date = input("Enter Second Date: ").split(" ")
    
    def getTimeDiff(fist_date, second_date):
        month1 = time.strptime(first_date[0], "%b").tm_mon
        month2 = time.strptime(second_date[0], "%b").tm_mon
    
        date1 = date(int(fist_date[2]), month1, int(first_date[1]))
        date2 = date(int(second_date[2]), month2, int(second_date[1]))
        delta = date2 - date1
        return delta.days
    
    res = getTimeDiff(first_date, sec_date)
    print(res)
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2021-11-25
      • 2011-08-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多