【问题标题】:How do I convert the timestamp of Facebook "Message" object如何转换 Facebook“消息”对象的时间戳
【发布时间】:2017-08-31 04:07:14
【问题描述】:

如果这是一个非常愚蠢的问题,我深表歉意。我正在通过 Facebook Messenger API 阅读message object,使用 Python 中的 Flask。

我在读取JSON对象后首先提取时间戳

# read the JSON from Flask "request" object    
input_json = request.get_json() 
# extract the timestamp
ts = input_json["entry"][0]["messaging"][0]["timestamp"]

然后我尝试使用datetime (docs) 将结果转换为人类可读的日期格式,认为这是一个 Unix 时间戳,但它返回一个 ValueError: year is out of range时间>。

import datetime
datetime.datetime.fromtimestamp(int(ts)))

现在发现特定消息有一个时间戳1504129573859,这是在将来,当我检查例如here.

当我向它提供文档(上面的链接)中给出的时间戳时也会发生同样的错误,即 1458692752478 所以我认为这不是我的输入解析的问题。我在此处或 FB 文档上找不到任何关于此的内容,感谢您的帮助!

  • 这是哪种时间格式,如何将其转换为datetime 对象?

  • 还是我的方法/想法有问题?

【问题讨论】:

    标签: python datetime timestamp facebook-messenger facebook-messenger-bot


    【解决方案1】:

    您可以先将fb的时间戳转换为python时间戳:

    import datetime
    datetime.datetime.fromtimestamp(ts/1000.0)
    

    【讨论】:

    • 无需将其转换为 int - 您会失去精度。在 Py2 中使用ts/1000.0(或from __future__ import division
    • 谢谢先生,完全解决了!这个 * 1000 业务有什么具体原因吗?
    • 因为 facebook 从纪元开始返回 milliseconds 的时间戳。和fromtimestamp() 接受seconds
    • 你可能会发现它在utc所以你可能需要datetime.utcfromtimestamp()
    • @AChampion 这很有意义,感谢 cmets 的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多