最初往es中写入的时间为时间戳,但是ES中该字段写入的值所代表的时间要比实际的时间戳所代表的时间滞后8小时。
。
原因是ES中存储的时间是UTC时间,而我想让时间戳表达的时间是东8区(UTC +08:00)的时间,但是时间戳本身是没有时区的概念的,所以不能去存时间戳,而是去存一个带有时区信息的时间字符串,ES会隐式转换,把ES认为是date类型的字符串直接转为date类型。
更改如下:
- 索引时间字段格式配置为date_time_no_millis,date_time_no_millis为iso格式
"date": {
"type": "date",
"format": "date_time_no_millis"
}
- python把时间戳(毫秒)转化为iso格式的字符串
def ts_to_iso8601(ts):
dt = datetime.datetime.fromtimestamp(ts / 1000, pytz.timezone("Asia/Shanghai"))
return dt.isoformat()