Python MongoEngine 解析从数据库返回的 JSON-ified DateTimeField
Python MongoEngine parse JSON-ified DateTimeField as returned from database
我使用 MongoEngine 在模型 class 中定义了一个 DateTimeField:
class A(Document):
...
time_m = DateTimeField(default=datetime.utcnow)
...
当我查询返回 JSON 化的 A 类型文档时,我可以看到时间表示为:
{
...
"time_m": {
"$date": 1591608726198
}
...
}
我想使用 Python 将字符串 '1591608726198' 转换为该日期和时间的人类可读字符串表示形式,但 不使用任何与 MongoEngine 相关的 classes(更准确地说,我想在 Jinja2 模板中转换它)。
我试过以下方法:
datetime.datetime.utcfromtimestamp(int('1591608726198'))
=> ValueError: year 52406 is out of range
dateutil.parser.parse('1591608726198')
=> OverflowError: signed integer is greater than maximum
有什么办法吗?
我试过了,得到了答案:
>>> from datetime import datetime
>>> ts = 1591608726198
>>> dt = datetime.fromtimestamp(ts/1000)
>>> print(dt.strftime("%Y-%m-%d %H:%M:%S"))
2020-06-08 15:02:06
您的时间戳是 13 位数字(精确到毫秒),要使用精确到毫秒的时间戳进行解析,您必须除以 1000。
我使用 MongoEngine 在模型 class 中定义了一个 DateTimeField:
class A(Document):
...
time_m = DateTimeField(default=datetime.utcnow)
...
当我查询返回 JSON 化的 A 类型文档时,我可以看到时间表示为:
{
...
"time_m": {
"$date": 1591608726198
}
...
}
我想使用 Python 将字符串 '1591608726198' 转换为该日期和时间的人类可读字符串表示形式,但 不使用任何与 MongoEngine 相关的 classes(更准确地说,我想在 Jinja2 模板中转换它)。
我试过以下方法:
datetime.datetime.utcfromtimestamp(int('1591608726198'))
=>ValueError: year 52406 is out of range
dateutil.parser.parse('1591608726198')
=>OverflowError: signed integer is greater than maximum
有什么办法吗?
我试过了,得到了答案:
>>> from datetime import datetime
>>> ts = 1591608726198
>>> dt = datetime.fromtimestamp(ts/1000)
>>> print(dt.strftime("%Y-%m-%d %H:%M:%S"))
2020-06-08 15:02:06
您的时间戳是 13 位数字(精确到毫秒),要使用精确到毫秒的时间戳进行解析,您必须除以 1000。