Skip to content

日期时间对象和Unix时间戳的相互转换

处理日期时间,将方便您对日志后续查询与可视化展示。本文档主要介绍使用SQL函数进行日期时间数据类型转换和日期时间偏移。

概念解释

SLS SPL语法中的日期时间处理主要涉及三种数据类型:日期时间字符串、日期时间对象和Unix时间戳。

  • 日期时间字符串日期时间字符串的主要用途是为了便于展示以及提升用户可读性。SLS SPL语法中的日期时间字符串主要分为两种形式:

    • 带有时区信息的日期时间字符串,如2019-06-02 18:41:26+08:00

    • 不带时区信息的日期时间字符串,如2019-06-02 10:41:26

    带有时区信息的日期时间字符串通过在日期时间后添加额外的时差信息来表达时区:

    • 2019-06-02 18:41:26+08:00表示该时间是东8区时区下的2019-06-02 18:41:26

    • 2019-06-02 18:41:26-07:00表示该时间是西7区时区下的2019-06-02 18:41:26

  • 日期时间对象实例化的日期时间,专指Datetime类型的数据。日期时间对象的主要用途为了便于展示以及提升用户可读性。

  • Unix时间戳从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。Unix时间戳的主要应用场景有:

    • 表示系统时间。日志事件中表示日志产生时间的元字段__time__,表示日志接收时间的字段__receieve_time__等,这些字段的值都使用Unix时间戳来表示对应的系统时间,如下例所示。

      __source__:  1.2.3.4
      __tag__:__receive_time__:  1562741899
      __topic__:
      __time__: 1562731122
    • 时间相关的计算。Unix时间戳是从1970年1月1日开始所经过的秒数,因此在很多场景下便于直接进行日期时间相关的计算,如下例如示。

      • 原始日志

        time1: 1562741899
        time2: 1562731122
      • SPL语句

        python
        * | extend time_diff = cast(time1 as BIGINT) - cast(time2 as BIGINT)
      • 加工结果

        time1: 1562741899
        time2: 1562731122
        time_diff: 10777

数据类型转换和转换函数

转换场景转换函数
日期时间对象和Unix时间戳的相互转换日期时间对象转为Unix时间戳to_unixtime智能转换函数,将日期时间对象或日期时间字符串转换为Unix时间戳。
日期时间对象和Unix时间戳的相互转换Unix时间戳转为日期时间对象from_unixtime 智能转换函数,将Unix时间戳转换成无时区的日期时间对象。
日期时间对象和日期时间字符串的相互转换。日期时间对象转为日期时间字符串。date_format智能转换函数,用于将timestamp类型的日期和时间对象转换为指定格式的日期和时间字符串。
日期时间对象和日期时间字符串的相互转换。日期时间字符串转为日期时间对象。date_parse智能智能函数,用于将日期和时间字符串转换为指定格式的timestamp类型的日期和时间对象。

日期时间对象和Unix时间戳的相互转换

  • 处理函数

    • to_unixtime转换函数,将日期时间对象或日期时间字符串转换为Unix时间戳。

    • from_unixtime 转换函数,将Unix时间戳转换成带时区的日期时间对象。

  • 场景一:使用to_unixtime转换函数,将日期时间对象或日期时间字符串转换为Unix时间戳。

    • 原始日志

      time: 2023-09-21 10:59:37.055
    • SPL语句

      python
      * | extend time=cast(time as TIMESTAMP) | extend new_time=to_unixtime(time)
    • 查询和分析结果

      time: 2023-09-21 10:59:37.055
      new_time:1695293977.055
  • 场景二:使用from_unixtime转换函数 ,将Unix时间戳转化带时区的timestamp类型的日期和时间。

    • 原始日志

      time:1695191402
    • SPL语句

      python
      * | extend time=cast(time as DOUBLE) | extend new_time=from_unixtime(time)
    • 查询和分析结果

      time: 1695191402
      new_time:2023-09-20T06:30:02.000