Elasticsearch中的datetime-如何处理时区
我尝试为包含日期的字段编制索引 如何为不同时区的日期编制索引 我已将elasticsearch字段设置为: '请求的日期':{“类型”:“日期”,“格式”:“日期时间号”} 'local_dt':{“type”:“date”,“format”:“date\u time\u no\u millis”} 我尝试为这些值编制索引(local_dt): (请求的时间是法国的当前时间) 我没有通过Kibana获得预期的结果:Elasticsearch中的datetime-如何处理时区,datetime,
elasticsearch,timezone,kibana,timezone-offset,Datetime,
elasticsearch,Timezone,Kibana,Timezone Offset,我尝试为包含日期的字段编制索引 如何为不同时区的日期编制索引 我已将elasticsearch字段设置为: '请求的日期':{“类型”:“日期”,“格式”:“日期时间号”} 'local_dt':{“type”:“date”,“format”:“date\u time\u no\u millis”} 我尝试为这些值编制索引(local_dt): (请求的时间是法国的当前时间) 我没有通过Kibana获得预期的结果: [local_dt] IT October 28th 2016, 01:46:1
[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
因此,对于请求的_dt,我得到了我所期望的
对于本地人来说,我没有得到我想要的
我尝试用UTC偏移量替换Z值,但无法获得正确的输出
是否有人能向我解释如何获得我想要的每个时区的正确输出 根据我的阅读(以及我自己的经验),Kibana将为@时间戳编制索引,假设它们是UTC,格式,并且只有2018-04-23T10:45:13.899Z
。请注意,我们只有毫秒和T
作为分隔符,而Z
表示UTC
因此,如果您有一个本地datetime
对象,请尝试将其转换为UTC时间,并按上面的方式格式化
- 如果是
now()
,请使用django.utils.timezone的timezone.now()
;或者,如果没有django,您将拥有datetime.datetime.utcnow()
- 如果您已有
datetime()
对象,则可以执行以下操作:
这:
(感谢)
当您拥有对象时,格式如下:
timeStr = datetime.strftime(your_utc_time_object, "%Y-%m-%dT%H:%M:%S.%f") # %f: microseconds, 1/10^6 seconds.
timeStr = timeStr[:-3] # delete the trailing 3 digits, convert to milliseconds
toInsert["@timestamp"] = nowStr + "Z" # add 'Z' at last
对于像我这样通过谷歌搜索来到这里的人来说,你不能在时间戳的末尾附加一个字母并让Elasticsearch识别它
我认为情况会是这样,因为它识别并输出UTC时间戳末尾的“Z”,所以我在自己的时间戳上附加了“R”,表示它们来自UTC-5。下面是它们相邻时的样子:
"2020-04-09T07:35:15.100Z" # parsed as UTC
"2020-04-09T07:35:15.100R" # illegal argument exception
然而,没有一种内置格式能够识别这个额外的字母;必须这样指定时间偏移
"2020-04-09T07:35:15.100-0500"
"2020-04-09T07:35:15.100-05:00"
或者在管道处理器中指定时区
{
"pipeline": {
"processors": [
{
"date": {
"field": "raw_date",
"formats": ["ISO8601"],
"timezone": "America/New_York"
}
}]
}
}
您在logstash
中尝试了日期过滤器?我没有使用logstash;只是尝试使用python发送值
"2020-04-09T07:35:15.100-0500"
"2020-04-09T07:35:15.100-05:00"
{
"pipeline": {
"processors": [
{
"date": {
"field": "raw_date",
"formats": ["ISO8601"],
"timezone": "America/New_York"
}
}]
}
}