Elasticsearch中的datetime - 如何处理时区

时间:2016-10-27 21:54:04

标签: datetime elasticsearch timezone kibana timezone-offset

我尝试索引包含日期的字段。

如何从不同的时区索引日期?

我设置了我的弹性搜索字段,如下所示: ' requested_dt':{" type":" date"," format":" date_time_no_millis"} ' local_dt':{"输入":"日期","格式":" date_time_no_millis"}

我尝试索引这些值(local_dt): (requested_dt是法国当前时间)

IT 2016-10-27T23:46:17Z
GB 2016-10-27T22:46:19Z

我没有通过Kibana得到预期的结果:

[local_dt]
IT October 28th 2016, 01:46:17.000
GB October 28th 2016, 00:46:19.000

[requested_dt]
IT October 27th 2016, 23:46:17.000
GB October 27th 2016, 23:46:19.000

因此,对于requested_dt,我得到了我期望的结果。

对于local_dt,我没有得到我想要的东西。

我已尝试用UTC偏移替换Z值,但我无法获得正确的输出。

是否有人能够向我解释如何为我想要的每个时区获得正确的输出?

1 个答案:

答案 0 :(得分:3)

在我阅读(以及我自己的经验)时,Kibana会将@timestamp编入索引,假设它们以UTC格式,而非格式为2018-04-23T10:45:13.899Z。请注意,我们只有毫秒,T作为分隔符,Z表示UTC。

https://discuss.elastic.co/t/kibana-timezone/29270/5

因此,如果您有一个本地datetime对象,请尝试转换为UTC时间,并将其格式化为如上所述。

  • 如果是now(),请使用timezone.now()的{​​{1}};或者,没有django,你有django.utils.timezone
  • 如果您已有datetime.datetime.utcnow()个对象,则可以执行以下操作:

这样:

datetime()

(感谢this answer

当您拥有该对象时,格式如下:

import pytz, datetime
local = pytz.timezone ("Europe/Paris")
local_dt = local.localize(your_datetime_object, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)