【问题标题】:Python: Adding 3 weeks to any datePython:将 3 周添加到任何日期
【发布时间】:2011-07-08 13:37:51
【问题描述】:

我需要有关程序的帮助。
当用户可以控制日期时,如何将 3 周(21 天)添加到任何给定日期?

用户将输入日期 YYYY-MM-DD。

下面我试图找到连字符并确保只有 2 个。这是我目前所拥有的,但它所做的只是重复自己,有人能告诉我哪里出错了吗?:

date = raw_input("Enter date: ")
i = 0
while i <= len(date):
    if date[i] != "-":
    i = i + 1
print date

现在我要选择年、月、日。有没有更简单的方法可以做到这一点,因为我需要考虑更改月份等?

year = date[0:4]
month = date[5:7]
day = date[9:11]

谢谢

【问题讨论】:

    标签: python date


    【解决方案1】:

    对任务使用datetime 模块。您创建一个日期时间感知对象并向其添加 21 天 timedelta 对象。

    >>> import datetime
    >>> u = datetime.datetime.strptime("2011-01-01","%Y-%m-%d")
    >>> d = datetime.timedelta(days=21)
    >>> t = u + d
    >>> print(t)
    2011-01-22 00:00:00
    

    【讨论】:

    • 非常感谢,但我想我可能不得不以老式的方式来做这件事……我们从来没有被教过约会时间。
    • senthil - 感谢您的鼓励!我想我要去读一读,我真的不想为一个可以如此简化的代码编写大量代码。我不能谢谢你给我看。
    • @monica,如果你不使用 datetime 和 timedelta,你肯定需要一堆代码来说明月份的不同长度——尤其是闰年的二月,如果这 3 周的时间会让你超过 12 月底等。
    • @gnibbler,我好像做了很久,发现我不允许使用日期时间
    【解决方案2】:

    您可以使用 datetime.timedelta 对象来表示 3 周,然后将其添加到表示用户输入的 datetime 对象中。

    import datetime
    
    date = raw_input("Enter date: ")
    aDate = datetime.datetime.strptime(date,"%Y-%m-%d")
    threeWeeks = datetime.timedelta(weeks = 3)
    
    print aDate + threeWeeks
    

    有关使用 strptime 方法的详细信息,请参阅http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior

    【讨论】:

    • q,感谢您提供的所有帮助,并且回复如此迅速。非常感谢。
    【解决方案3】:

    试试这个,我相信这是最短和最简单的方法

    
    from dateutil.relativedelta import relativedelta
    
    period = date.today() + relativedelta(weeks=+1)
    
    

    【讨论】:

    • 我真的很感激,兰德尔。有时,第三方包会使所有内容都更具可读性。
    【解决方案4】:

    您可以使用datetime.strptime 来获取用户作为日期的输入

    from datetime import datetime
    i = str(raw_input('date'))
    try:
        dt_start = datetime.strptime(i, '%Y, %m, %d')
    except ValueError:
        print "Incorrect format"
    

    然后再增加 3 周(21 天)

    dt_start = dt_start + datetime.timedelta(days=21)
    

    你来了

    【讨论】:

    • (1) raw_input() 附近不需要 str()。 (2) strptime()timedelta() 都已显示 here - 我看不到您的答案在 4 年前发布的答案中添加了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多