[ES]ElasticSearch中时间日期的时区探讨

问题

由于ES不能指定时区(也许将来会支持也说不一定),目前是时区始终是UTC。

  • 如果存储是日期时间类型,则需考虑时区问题;
  • 如果是字符串,除非直接比对,否则在转换为日期是会有时区问题;
  • 如果是时间戳,即Long类型,同样需要考虑时区问题。

试验

执行的查询SQL命令:

POST http://localhost:9200/_sql?format=text

当前时间-默认

查询语句:

javascript 复制代码
{
  "query": "SELECT CURRENT_TIMESTAMP as ts"
}

返回结果:

ts


2023-11-30T23:31:14.632Z

返回的结果,实际上与我上海时区的实际相差了8个小时,即默认返回的是UTC时间。

当前时间-上海时区

查询语句:

javascript 复制代码
{
  "query": "SELECT CURRENT_TIMESTAMP as ts",
  "time_zone":"Asia/Shanghai"
}

返回结果:

ts


2023-12-01T07:33:26.840+08:00

从返回的结果可以看出,现在已经带时区信息,为东8区,并且与我系统时间一致。

时间戳-强转

查询语句:

javascript 复制代码
{
  "query": "SELECT 1701387000000::timestamp as ts, 1701387000000::date as dt",
  "time_zone":"Asia/Shanghai"
}

返回结果:

ts | dt

---------------------------------- -+------------------------------------

2023-11-30T23:30:00.000Z|2023-11-30T00:00:00.000Z

从返回的结果可以看出,即便指定了时区参数,强转的日期,仍旧只会返回UTC时区值,而不受时区影响。

通过采用CAST也是一样,不受时区参数影响:

javascript 复制代码
{
  "query": "SELECT CAST('2023-11-30T23:30:00.000Z' AS TIMESTAMP) as ct",
  "time_zone":"Asia/Shanghai"
}

返回结果:

ct


2023-11-30T23:30:00.000Z

时间戳-函数转换

查询语句:

javascript 复制代码
{
  "query": "SELECT DATETIME_FORMAT(1701387000000::TIMESTAMP,'yyyy-MM-dd HH:mm:ss.SSS') as df",
  "time_zone":"Asia/Shanghai"
}

返回结果:

df


2023-12-01 07:30:00.000

从返回的结果可以看出,即便指定了时区参数,强转的日期,人家只会返回UTC时区值。

日期解析-默认

查询语句:

javascript 复制代码
{
  "query": "SELECT DATETIME_PARSE('2023-11-30 23:30:00.000','yyyy-MM-dd HH:mm:ss.SSS') as dp",
  "time_zone":"Asia/Shanghai"
}

返回结果:

dp


2023-11-30T23:30:00.000+08:00

从返回的结果可以看出,指定了时区参数,则该日期即按指定的时区解析。

日期解析-带时区

查询语句:

javascript 复制代码
{
  "query": "SELECT DATETIME_PARSE('2023-11-30 23:30:00.000 UTC','yyyy-MM-dd HH:mm:ss.SSS VV') as dp",
  "time_zone":"Asia/Shanghai"
}

返回结果:

dp


2023-12-01T07:30:00.000+08:00

从返回的结果可以看出,指定了时区参数,由于字符串中指定了时间为UTC,而参数指定了上海时区,则结果返回了上海时区的结果。

结论

  1. 强转日期时间不受时区参数影响;
  2. 函数转换日期会依据指定时区返回。
相关推荐
INFINI Labs19 小时前
Easysearch analysis-ik 多词典性能优化:从性能回退到分词性能提升 25%~30%
elasticsearch·性能优化·分词·performance·easysearch·ik
IT飞牛20 小时前
Elasticsearch 技术调研与实践
大数据·elasticsearch·搜索引擎
从此以后自律20 小时前
Git一篇
大数据·elasticsearch·搜索引擎
超人也会哭️呀20 小时前
ES 混合检索(文本+向量)中的条件处理陷阱——当权限过滤遇到关键词查询
android·大数据·elasticsearch
做个文艺程序员1 天前
第03篇:深入 Mapping 与数据类型设计——ES Schema 设计避坑指南
大数据·elasticsearch·搜索引擎·mapping设计
铭毅天下1 天前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎
Elastic 中国社区官方博客2 天前
在 Elasticsearch 中,存储向量查询速度最高提升 3 倍
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
海兰2 天前
从原始日志到系统知识:补齐 AI 可观测性的“上下文层“
人工智能·elasticsearch
逆境不可逃2 天前
【与我学 ClaudeCode】规划与协调篇 之 Skills:按需加载的领域知识框架
大数据·人工智能·elasticsearch·搜索引擎·agent·claudecode
奋斗的老史2 天前
LangChain4j + Elasticsearch 实现企业级向量存储(支持混合检索、元数据过滤)
elasticsearch·langchain4j