【问题标题】:Nearest timestamp in pythonpython中最近的时间戳
【发布时间】:2021-04-17 02:59:03
【问题描述】:

我有一个时间戳列表和一个关键时间戳来找到最近的时间戳,两者的格式都是'2019-11-22T11:37:52.338Z'

我已经尝试过这个解决方案Python - Locating the closest timestamp,但由于我的时间戳在string 中,导致我出错。当我尝试如下所示对它们进行类型转换时

def nearest(ts):
s = sorted(timestamp_list)
i = bisect_left(s, ts)
return min(s[max(0, i-1): i+2], key=lambda t: abs(int(ts) - int(t)))

ValueError: invalid literal for int() with base 10: '2019-11-22T11:37:52.338Z'结束

关于如何克服这个错误有什么建议吗?

【问题讨论】:

    标签: python string timestamp integer bisect


    【解决方案1】:

    您可以尝试 datetime 模块中的 strptime() 将您的字符串转换为日期时间对象:

    from datetime import datetime
    
    ts = '2019-07-22T11:37:52.338Z'
    datetime_object = datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%fZ')
    
    print(datetime_object)
    

    输出:

    2019-07-22 11:37:52.338000
    

    https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior


    这里是完整的例子:

    from bisect import bisect_left
    from datetime import datetime
    
    
    ts_list_str = ['2010-11-22T11:37:52.338Z', '2018-11-22T11:37:52.338Z', '2017-11-22T11:37:52.338Z']
    ts_list = [datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%fZ') for ts in ts_list_str]
    
    def nearest(ts):
        s = sorted(ts_list)
        i = bisect_left(s, ts)
        return min(s[max(0, i-1): i+2], key=lambda t: abs(ts - t))
    
    ts_str = '2019-07-22T11:37:52.338Z'
    ts = datetime.strptime(ts_str, '%Y-%m-%dT%H:%M:%S.%fZ')
    
    print(nearest(ts))
    

    【讨论】:

    • 感谢您的快速解决方案。我试图恢复最近时间戳的原始格式,我进一步使用它进行比较。我试过这个near_ts= near_ts.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3]+('z') 但是当我试图将它与未更改的时间戳进行比较时,它似乎不起作用。我检查了两个 ts 的类型,它们似乎是相同的str。有什么建议我哪里出错了吗?
    • 嗯,好的,知道了。使用“z”而不是“Z”的小错误。
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 2015-08-19
    • 2014-02-07
    • 2013-11-12
    • 2014-08-18
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多