我的日期格式如下: (u'Task',u'2017-01-06T02:23:44.000-0500')..第1阶段 (u'Task',u'2017-01-06T05:27:10.000-0500')..阶段2 (u'Task',u'2017-01-10T14:42:44.000-0500')......第2阶段
我必须计算每个阶段之间的时差 我正在使用它(我知道这是不正确的: - ()
import datetime as dt
date_format = "yyyy-mm-ddThh-mm-ss"
x1= d1.split('T')[0]+' '+(d1.split('T'))[1][:8]
x2= d2.split('T')[0]+' '+(d2.split('T'))[1][:8]
d1=('2017-01-06T02:23:44.000-0500')
d2=('2017-01-19T17:30:21.000-0500')
#some string slicing to get rid of T and the timezone indicator
start_dt = dt.datetime.strptime(x1, 'yyyy-mm-ddhh:mm:ss')
end_dt = dt.datetime.strptime(x2, 'yyyy-mm-ddhh:mm:ss')
x = start_dt - end_dt
它返回格式不匹配错误
有人可以帮我找到第1阶段和第2阶段之间的时间我必须递归计算
答案 0 :(得分:1)
主要是,帕特里克写道,格式字符串是错误的。您可以检查格式字符串的写入方式here。此外,变量d1
和d2
在声明之前使用,减去日期通常以difference = older_date - newer_date
的方式工作。简而言之:
import datetime as dt
date_format = "%Y-%m-%d %H:%M:%S"
d1=('2017-01-06T02:23:44.000-0500')
d2=('2017-01-19T17:30:21.000-0500')
x1 = d1.replace('T', ' ').split('.')[0]
x2 = d2.replace('T', ' ').split('.')[0]
start_dt = dt.datetime.strptime(x1, date_format)
end_dt = dt.datetime.strptime(x2, date_format)
x = end_dt - start_dt
print(x)
打印:
13 days, 15:06:37
x1
和x2
的分割是个人品味,在索引处切换只是要求在格式更改期间或使用不同的区域设置时代码被破坏。
答案 1 :(得分:0)
您的格式字符串应为'%Y-%m-%d%H%M%S'
。
所以:
start_dt = dt.datetime.strptime((d1.split('T')[0]+''+(d1.split('T'))[1][:8]), '%Y-%m-%d%H:%M:%S')
end_dt = dt.datetime.strptime((d2.split('T')[0]+''+(d2.split('T'))[1][:8]), '%Y-%m-%d%H:%M:%S')
答案 2 :(得分:0)
你可以这样做:
import datetime as dt
# parses the string in Format 'yyyyMMddHHMMSS'
def parse(s):
return dt.datetime.strptime(s,"%Y%m%d%H%M%S")
# removes all T-: from string, leaves to . for split, returns only left part of split
def reformat(s):
return ''.join([x for x in s if x not in "T-:"]).split('.')[0]
d1=('2017-01-06T02:23:44.000-0500')
d2=('2017-01-19T17:30:21.000-0500')
f1 = reformat(d1)
f2 = reformat(d2)
start = parse(f1)
end = parse(f2)
delta = end - start
print(d1 + "=>" + f1)
print(d2 + "=>" + f2)
print(delta)
打印:
2017-01-06T02:23:44.000-0500=>20170106022344
2017-01-19T17:30:21.000-0500=>20170119173021
13 days, 15:06:37