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

这篇具有很好参考价值的文章主要介绍了[ES]ElasticSearch中时间日期的时区探讨。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

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

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

试验

        执行的查询SQL命令:

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

当前时间-默认

        查询语句:

{
  "query": "SELECT CURRENT_TIMESTAMP as ts"
}

        返回结果:

                     ts              
-------------------------------------
2023-11-30T23:31:14.632Z

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

当前时间-上海时区

           查询语句:

{
  "query": "SELECT CURRENT_TIMESTAMP as ts",
  "time_zone":"Asia/Shanghai"
}

        返回结果:

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

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

时间戳-强转

         查询语句:

{
  "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也是一样,不受时区参数影响:

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

        返回结果:

                 ct           
------------------------------------
2023-11-30T23:30:00.000Z

时间戳-函数转换

        查询语句:

{
  "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时区值。

日期解析-默认

        查询语句:

{
  "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

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

        

 日期解析-带时区

        查询语句:

{
  "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. 函数转换日期会依据指定时区返回。

        文章来源地址https://www.toymoban.com/news/detail-756079.html

到了这里,关于[ES]ElasticSearch中时间日期的时区探讨的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • trino关于查询elasticSearch中时间字段的问题

    查看官方文档:Elasticsearch connector — Trino 395 Documentation  这段话的意思就是,elasticSearch支持很多时间类型的格式化方式,但是trino中es连接器只支持默认的date类型,就是不能加时间格式化 创建 yc_test_data 索引,索引中包含两个属性create_time 和 name PUT   http://10.226.21.38:9200/yc

    2024年02月16日
    浏览(28)
  • elasticsearch自动填充时间,并转换为上海时区

    由于ES默认时区为UTC,比我上海时区慢八个小时且是TZ格式,当我们需要自动填充为yyyyy-MM-dd HH:mm:ss格式时我们就需要对其进行处理。 1、定义预处理管道:chage_utc_to_asiash(管道名可更改) 2、创建索引,指定管道 3、写入数据 4.查看结果  

    2024年02月11日
    浏览(28)
  • 启动ElasticSearch报错:error updating geoip database

    启动ElasticSearch报错: error updating geoip database 这是一个bug 在elasticsearch.yml中添加如下配置: 关闭geoip数据库的更新

    2024年02月15日
    浏览(28)
  • 漏洞复现Influxdb,H2database,couchDB,ElasticSearch

    一、Influxdb - 未授权访问 - Jwt 验证不当 默认端口: 8086 8088 influxdb是一款著名的时序数据库,其使用jwt作为鉴权方式。在用户开启了认证,但未设置参数shared - secret的情况下,jwt的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在influxdb中执行SQL语句。 1 、借助https

    2023年04月10日
    浏览(22)
  • Elasticsearch 线上实战问题及解决方案探讨

    1.1 问题描述 我有 1tb 的一个大索引若干,要迁移到另外一个新集群去,有没有好办法?reindex好像会中断...... reindex 是不是就算设置了频率也会莫名的中断,而且没地方查到错误? 1000多万 的数据,大概 80G  用 reindex 有时候都会莫名的断。 有时候是全的,有时候不全。 http

    2024年02月05日
    浏览(34)
  • 数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb漏洞复现

    参考:influxdb CVE-2019-20933 靶场环境:vulhub 打开靶场进入环境: 访问: 端口扫描: 默认端口: 8086:用于客户端和服务端交互的HTTP API 8088 :用于提供备份和恢复的RPC服务 influxdb 是一款著名的时序数据库,其使用 jwt 作为鉴权方式。在用户开启了认证, 但未设置参数 shared-s

    2024年02月06日
    浏览(29)
  • Elasticsearch 中默认的日期格式

    在 Elasticsearch 中,当你将字段类型定义为 date 类型时,你可以将日期存储为一种可解析的格式,然后 Elasticsearch 可以将其转换为以毫秒为单位的长整型数字进行内部存储。默认的日期格式是 “strict_date_optional_time||epoch_millis”。 这种格式包含了以下两种日期格式: strict_date_

    2024年02月13日
    浏览(26)
  • ElasticSearch 启动问题:“error downloading geoip database [GeoLite2-Country.mmdb]“

    问题描述 \\\"log.level\\\":\\\"ERROR\\\", \\\"message\\\":\\\"error downloading geoip database [GeoLite2-Country.mmdb]\\\" 在 config/elasticsearch.yml 中添加如下配置:  

    2024年02月12日
    浏览(38)
  • 服务攻防-数据库安全-Influxdb&H2database&CouchDB&ElasticSearch数据库漏洞复现

    目录 一、Influxdb-未授权访问-Jwt 验证不当 1、Infuxdb简介 2、安全问题 3、漏洞复现  二、H2database-未授权访问-配置不当 1、H2database简介 2、安全问题 3、漏洞复现  三、CouchDB-权限绕过配合RCE-漏洞 1、CouchDB简介 2、安全问题 3、漏洞复现  四 、ElasticSearch-文件写入RCE-漏洞 1、Ela

    2024年02月16日
    浏览(33)
  • SpringBoot+Elasticsearch按日期实现动态创建索引(分表)

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: SpringBoot+Elasticsearch按日期实现动态创建索引(分表) ⏱️ @ 创作时间: 2023年02月19日 SpringBoot+Elasticsearch,通过 @Document 注解,利用EL表达式指定到配置文件,实现动态生成

    2023年04月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包