我在开发python脚本的有限环境中工作。
我的问题是我必须能够完成日期时间的加法和减法。
例如,我得到以下字符串:
"09/10/20,09:59:47-16"
格式为年/月/日,小时:分钟:秒-ms。
如何在Python中为此数字添加30秒?我不能使用基本的加法和减法以及字符串解析函数。
答案 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,但它完成了工作。