我正在尝试使用joda-time库格式在弹性搜索中格式化日期字段。我想实现格式"Mon Sep 18 17:12:37 IST 2017"
。首先我使用以下代码:
"alarm_timestamp": {
"type": "date",
"format": "EEE MMM d H:m:s zzz YYYY"
}
它不起作用。后来,我读到了here提出的问题。所以,我改变了代码:
"alarm_timestamp": {
"type": "date",
"format": "E MMM d H:m:s z Y"
}
在这两种情况下,都成功创建了映射。但是,当我尝试索引数据时,它给出了错误。
它给出的错误是:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse [alarm_timestamp]"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse [alarm_timestamp]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Invalid format: \"Mon Sep 18 17:12:37 IST 2017\" is malformed at \"IST 2017\""
}
},
"status": 400
}
有任何建议吗?
答案 0 :(得分:0)
来自format
的Elasticsearch documentation:
支持完全自定义的日期格式。的语法 这些在Joda文档中有解释。
Joda docs说z
:
区域名称:无法解析时区名称('z')。
问题是时区的IST
这些缩写可能不明确。
Wikipedia Time Zone页面说明如下:
<强>缩写强>
时区 通常用字母缩写表示,如“EST”, “WST”和“CST”,但这些不属于国际时间和 日期标准ISO 8601及其作为唯一指定者的用途 不鼓励区域。这种指定可能含糊不清;例如, “ECT”可以解释为“东加勒比时间”(UTC-4h), “厄瓜多尔时间”(UTC-5h),或“欧洲中部时间”(UTC + 1h)。
所以你会看到一些缩写会有效,有些则不会。鼓励不要使用这些缩写。而是使用以下之一:
E MMM d H:m:s Z Y
,索引为Mon Sep 18 17:12:37 +02:00 2017
E MMM d H:m:s ZZZ Y
,索引为Mon Sep 18 17:12:37 Europe/Istanbul 2017
以下是Joda的Available Time Zones列表。