在没有标准库的情况下添加和减去日期

时间:2009-10-20 16:02:47

标签: python datetime

我在开发python脚本的有限环境中工作。

我的问题是我必须能够完成日期时间的加法和减法。

例如,我得到以下字符串:

"09/10/20,09:59:47-16"

格式为年/月/日,小时:分钟:秒-ms。

如何在Python中为此数字添加30秒?我不能使用基本的加法和减法以及字符串解析函数。

4 个答案:

答案 0 :(得分:2)

你在不同的基础上做数学。您需要解析字符串并提出值列表,例如(年,月,日,小时,分钟,秒),然后执行其他基础数学加法和减法。例如,小时数是24小时,因此您需要使用模数来执行计算。这听起来像是家庭作业,所以我不再详细介绍了。)

答案 1 :(得分:2)

为了完整性,datetime.datetime.strptime和datetime.timedelta包含在默认的python发行版中。

from datetime import datetime, timedelta

got = "09/10/20,09:59:47-16"

dt = datetime.strptime(got, '%y/%m/%d,%H:%M:%S-%f')
dt = dt + timedelta(seconds=30)
print dt.strftime('%y/%m/%d,%H:%M:%S-%f')

完全打印

09/10/20,10:00:17-160000

文档here

答案 2 :(得分:2)

执行日期算术的最简单方法是不在日期上实际执行该算术,而是将其用于更简单的数量。

通常,更简单的数量是自某个纪元以来的秒数。 1970年1月1日很好地解决了问题。知道了这个时代,每个月的天数,以及哪些年份是闰年,你可以很容易地从这个“秒数”表示转换为日期字符串(如果不是在天真版本中慢慢转换)。

您还需要将日期字符串转换回更简单的表示形式。这再次,不是太难。

一旦有了这两个函数,算术就很简单了。只需添加或减去“秒数”表示的时间量。然后转换回日期字符串。

尽管如此,我希望这是一项家庭作业,因为你绝对不应该在生产代码中编写自己的日期处理函数。

答案 3 :(得分:0)

这是我解决问题的方法:

year = int(s[0:2])
month = int(s[3:5])
day = int(s[6:8])
hour = int(s[9:11])
minute = int(s[12:14])
second = int(s[15:17])

amount_to_add = 30
second = second + amount_to_add
days_in_month = 30
if(month == 1 or month == 3 or month == 5 or month ==7 or month ==  8 or month == 10 or         month == 12):
    days_in_month = 31
if(month == 2):
    days_in_month = 28
if ((((year%4 == 0) and (year%100 != 0)) or (year%400 == 0)) and month == 2):
    days_in_month = 29

if(second > 60):
    minute = minute + second/60
    second = second%60
if(minute > 60):
    hour = hour + minute/60
    minute = minute%60
if(hour >24):
    day = day + hour/60
    hour = hour%24
if(day > days_in_month):
    month = month + day/days_in_month
    day = day%days_in_month
if(month > 12):
    year = year + month/12
    month = month%12

有点像kludge,但它完成了工作。