【问题标题】:add days to a date in Python using loops, ranges, and slicing在 Python 中使用循环、范围和切片将日期添加到日期
【发布时间】:2011-03-05 21:02:39
【问题描述】:

我是 python 初学者,最近学习了以下基础知识:

函数、循环、范围、for/if 语句和字符串切片。

到目前为止我有:

date = raw_input("Enter the date checked out in YYYY-MM-DD format: ")
dueDate = raw_input("Book is due:")

length = len(date)
counter=0

for i in range(length):

    if date[i] == "-":
            counter = counter + 1
if 1 < counter < 2:

        print date
if counter > 2:

        print date,"too many hyphens"

if counter <= 1:

        print date,"not enough hyphens"

然后我有:

year = date[0:4]

month = date[4:6]

day = date[6:10]

if year == date[0:4]:

    year=year

if month == date[4:6]:

    month = month

if day == date[6:10]:

    day=day

    print year+month+day

我正在尝试将其分解为 YYYY-MM-DD,然后从用户输入的日期算起 7 天后的截止日期。

程序的第二部分不能与第一部分一起使用,我不知道如何组合它们,(或者如果那应该存在的话)我是否必须使用一个函数?

不需要考虑闰年,我不能使用 datetime 和 time 这样的模块,因为我还没有学过它们,我想使用不同的循环变体和 if/elif 语句来编写所有代码。

如果有人能帮助我指出正确的方向,我将不胜感激!

谢谢,

D

【问题讨论】:

    标签: python date loops if-statement range


    【解决方案1】:

    在掌握了其他技术之后,我想说您还应该了解异常和日期时间模块。这里有利于日期验证。

    import datetime
    while True:
        try:
            date = datetime.datetime.strptime(raw_input("Enter the date checked out in YYYY-MM-DD format: "), "%Y-%m-%d")
    
        except ValueError:
            print "The date was not inserted in the following format: YYYY-MM-DD"
        else:
            break
    ~                    
    

    【讨论】:

    • loskit, @dappawit, @tkone 感谢大家的帮助!我真的很感激,我会尝试开始研究这个程序,看看它会去哪里。
    【解决方案2】:

    首先,您的代码在网站上很难阅读——清理它可能会有所帮助。

    其次,看看 datetime 模块。它提供将文本翻译成日期对象,然后返回文本的服务。

    一旦你有了一个日期对象,你就可以做很多事情,比如:

    Python 2.7 (r27:82508, Jul  3 2010, 21:12:11) 
    [GCC 4.0.1 (Apple Inc. build 5493)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from datetime import datetime, timedelta
    >>> d = datetime.strptime('2011-03-05','%Y-%m-%d')
    >>> d
    datetime.datetime(2011, 3, 5, 0, 0)
    >>> d.strftime('%Y-%m-%d')
    '2011-03-05'
    >>> tomorrow = d+timedelta(days=1)
    >>> tomorrow
    datetime.datetime(2011, 3, 6, 0, 0)
    >>> tomorrow.strftime('%Y-%m-%d')
    '2011-03-06'
    

    见:http://docs.python.org/library/datetime.html

    【讨论】:

    • 看到你正在尝试的日期是给定日期后一周的日期,上面的代码几乎完美,只需将 timedelta(days=1) 更改为 timedelta(days=7)跨度>
    【解决方案3】:

    我会尝试datetime,即使您还没有学会它。我认为这并不复杂或难学。使用它比任何自制方法都容易得多。使用datetime.date() 表示日期,使用datetime.timedelta 增加(或减少)一些天数。

    import datetime
    
    datestr = raw_input("Enter the date checked out in YYYY-MM-DD format: ")
    year,month,day = datestr.split('-')
    date = datetime.date(year,month,day)
    duedate = date + datetime.timedelta(days=7)
    print 'Due date is : {0}'.format(duedate)
    

    【讨论】:

      【解决方案4】:

      在datetime模块中可以使用timedelta函数

          from datetime import timedelta
          New_date=DateTime_obj-timedelta(days=No. of days to add)
      

      【讨论】:

        猜你喜欢
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多