【问题标题】:can some one help me calculating time difference between two Date Stamps?有人可以帮我计算两个日期戳之间的时间差吗?
【发布时间】:2017-11-14 11:42:16
【问题描述】:

我的日期格式是这样的: (u'Task', u'2017-01-06T02:23:44.000-0500') .. 第一阶段 (u'Task', u'2017-01-06T05:27:10.000-0500') .. 第 2 阶段 (u'Task', u'2017-01-10T14:42:44.000-0500') ...第二阶段

我必须计算每个阶段之间的时间差 我正在使用这个(我知道这是不正确的:-()

    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 阶段之间花费的时间吗?我必须递归地计算这个时间

【问题讨论】:

  • 为什么end_dtd1,应该是d2?不是吗
  • 只是为了确定 - 你知道 datetime 对象可以直接相互减去,对吧?
  • 请帮帮我!
  • 您收到格式不匹配错误,因为您的格式错误。阅读文档:strptime - 向下滚动到表格并在格式字符串中提供正确的 %... 格式参数。
  • 试试%Y-%m-%d%H-%M-%S - 手头没有pyfiddle - 和/或阅读stackoverflow.com/questions/9516025/parsing-datetime-in-python。也许您还应该订购 Code a Little - 订购看起来很奇怪。

标签: python datetime timestamp difference


【解决方案1】:

主要是,正如 Patrick 所写,格式字符串是错误的。您可以检查格式字符串的写入方式here。此外,变量d1d2 在声明之前使用,日期减法通常以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

x1x2 的拆分是个人喜好,在索引处切片只是要求在格式更改或使用不同的语言环境时破坏代码。

【讨论】:

  • 非常感谢先生,实际上我的工作看起来很不同,但必须摆脱问题护理的东西!也感谢帕特里克
  • @SiddharthSonone 如果您还有其他疑问或问题,请随时提问。如果问题解决了,考虑接受这个答案 =)
【解决方案2】:

您的格式字符串应为'%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')

【讨论】:

    【解决方案3】:

    你可以这样做:

    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
    

    【讨论】:

    • 感谢您指出格式字符串中的错误 :-) 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2011-08-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多