日期时间对象和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