代码之家  ›  专栏  ›  技术社区  ›  Marc Maxmeister

python:将unix/posix epoch时间戳转换为datetime(在monogdb之后,date\u util json导出)

  •  0
  • Marc Maxmeister  · 技术社区  · 7 年前

    {
    u'_group': 0,
    u'_range': u'',
    u'canon': 0,
    u'comment_id': 0,
    u'created': {u'$date': 1491468607000L},
    u'description': u''
    }
    

    所有的日期都是这样的:

    [{u'$date': 1491457629000L}, {u'$date': 1491458993000L}, {u'$date': 1491457072000L}, {u'$date': 1491457035000L}, {u'$date': 1491457330000L}, {u'$date': 1491458323000L}, {u'$date': 1491458147000L}, {u'$date': 1491458277000L}, {u'$date': 1491459839000L}, {u'$date': 1491466340000L}, {u'$date': 1491463804000L}, {u'$date': 1491464304000L}, {u'$date': 1491465145000L}, {u'$date': 1492073749000L}, {u'$date': 1492073750000L}, {u'$date': 1492075415000L}, {u'$date': 1492155813000L}, {u'$date': 1492608582000L}, {u'$date': 1492671698000L}, {u'$date': 1493001047000L}, {u'$date': 1493714117000L}]
    

    我的测试:

    y = {u'$date': 1491457629000L}
    >>> y['$date']
    1491457629000L
    

    print(
        datetime.datetime.fromtimestamp(
            y['$date']
        ).strftime('%Y-%m-%d %H:%M:%S')
    )
    

    from dateutil import parser
    parser.parse(str(y['$date']))
    

    溢出错误:Python int太大,无法转换为C long

    utc_time = datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=y['$date'])
    

    似乎任何unix时间戳转换器都应该能够读取此信息。为什么不起作用?我也只需要年份和月份,所以时区的特殊性超出了我的需求范围。

    converting epoch time with milliseconds to datetime

    2 回复  |  直到 7 年前
        1
  •  0
  •   Marc Z    7 年前

    错误似乎来自转换,您的值可能以毫秒为单位,python datetime.datetime.fromtimestamp

        2
  •  0
  •   Marc Maxmeister    7 年前

    {u'$date': 1491457629000L}
    

    但是扭转了 json_util.dumps() 方法及其相应的 json_util.loads() 方法有效。它必须在请求的数据上这样做,而不是在python中使用标准的.json()方法 requests

    from bson import json_util  
    import requests
    raw = requests.get('someurlhere')
    data = json_util.loads(raw.text)
       {...
       u'created': datetime.datetime(2017, 4, 6, 5, 47, 9, tzinfo=<bson.tz_util.FixedOffset object at 0x0000000002FAAC18>),
    ...}
    

    这会产生一个datetime对象,我可以使用它。