【问题标题】:Making a time adding function in python在 python 中创建时间添加函数
【发布时间】:2016-12-15 21:08:56
【问题描述】:

我正在尝试构建一个接收日期并添加天数的函数,更新所有内容以防万一它发生变化,到目前为止我已经想出了这个:

def addnewDate(date, numberOfDays):

    date = date.split(":")   
    day = int(date[0])
    month = int(date[1])
    year = int(date[2])
    new_days = 0
    l = 0
    l1 = 28
    l2 = 30
    l3 = 31
    #l's are the accordingly days of the month

    while numberOfDays > l:
        numberOfDays  = numberOfDays - l 
        if month != 12:
            month += 1
        else:
            month = 1
            year += 1

        if month in [1, 3, 5, 7, 8, 10, 12]:
            l = l3
        elif month in [4, 6, 9, 11]:
            l = l2
        else:
            l = l1

    return  str(day) + ':' + str(month) + ':' + str(year) #i'll deal 
    #with fact that it doesn't put the 0's in the < 10 digits later

期望的输出:

addnewDate('29:12:2016', 5):

'03:01:2017'

我认为问题出在变量上,或者我使用它们的位置,虽然有点迷失了..

提前致谢!

p.s 我不能使用 python 内置函数 :)

【问题讨论】:

  • 有时l1 = 29(每 4 年一次,但不能被 400 整除)
  • 哦,对了,忘记了,但为了简单起见,我们假设它只到 28

标签: python time while-loop


【解决方案1】:

由于您不能使用标准库,这是我的尝试。我希望我没有忘记任何事情。

  • 定义月份长度表
  • 如果检测到闰年,则对其进行调整(每 4 年一次,但有特殊情况)
  • 在零索引的日期和月份工作,更轻松
  • 添加天数。如果小于当前月份的天数,则结束,否则,减去当前月份的天数并重试(while 循环)
  • 当上个月到达时,增加年份
  • 在最后加上 1 到日期和月份

代码:

def addnewDate(date, numberOfDays):
    month_days = [31,28,31,30,31,30,31,31,30,31,30,31]

    date = date.split(":")
    day = int(date[0])-1
    month = int(date[1])-1
    year = int(date[2])
    if year%4==0 and year%400!=0:
        month_days[1]+=1

    new_days = 0
    #l's are the accordingly days of the month

    day += numberOfDays

    nb_days_month = month_days[month]

    done = False   # since you don't want to use break, let's create a flag
    while not done:
        nb_days_month = month_days[month]
        if day < nb_days_month:
            done = True
        else:
            day -= nb_days_month
            month += 1
            if month==12:
                year += 1
                month = 0


return  "{:02}:{:02}:{:04}".format(day+1,month+1,year)

测试(可能并不详尽):

for i in ("28:02:2000","28:02:2004","28:02:2005","31:12:2012","03:02:2015"):
    print(addnewDate(i,2))
    print(addnewDate(i,31))

结果:

02:03:2000
31:03:2000
01:03:2004
30:03:2004
02:03:2005
31:03:2005
02:01:2013
31:01:2013
05:02:2015
06:03:2015

当然,这只是为了好玩。否则使用timedatetime 模块!

【讨论】:

  • 感谢您的快速回复,我会调查它,但我认为我至少不能完全使用它,我不能使用 python 的内置模块,因为我这是学校作业,因此也不能使用break..
  • 好吧,这很愚蠢,但无论如何,请检查我的编辑。再也没有break 的踪迹。你老师应该知道的更好......
  • 我会检查一下 :) 这是为交付任务分配的,我发布的代码中有一半是由他建议的,所以我有点试图完成这项工作,因为它应该有能够工作(如果我需要的话,也可以用于未来)添加愚蠢的东西,比如 400 天,谢谢你的帮助
  • 很抱歉再次打扰您,我可能会使用您的代码(!)但我不太明白您为什么要减去一个然后在最后添加它。如果我错了也请纠正我,列表中的第 13 个日期是因为年份更改的第 0 个月对吗?
  • 我发现使用 0 索引更容易,然后在最后恢复 1 索引。特别是当您与天数进行比较时。而且清单太长了。编辑。
猜你喜欢
  • 2012-09-29
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2010-10-27
  • 1970-01-01
  • 2023-03-18
  • 2018-04-29
相关资源
最近更新 更多