处理日期时间,将方便您对日志后续查询与可视化展示。本文向您介绍使用转换函数进行日期时间数据类型转换。
概念解释
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__
,表示日志接收时间的字段__receive_time__
等,这些字段的值都使用Unix时间戳来表示对应的系统时间,如下例所示。__source__: 192.0.2.1 __tag__:__receive_time__: 1562741899 __topic__: __time__: 1562731122
时间相关的计算。
Unix时间戳是从1970年1月1日开始所经过的秒数,因此在很多场景下便于直接进行日期时间相关的计算,例如如下示例。
原始日志
time1: 1562741899 time2: 1562731122
SPL语句
* | extend time_diff = cast(time1 as BIGINT) - cast(time2 as BIGINT)
查询和分析结果
time1: 1562741899 time2: 1562731122 time_diff: 10777
数据类型转换和转换函数
转换场景 | 转换函数 | |
日期时间对象和Unix时间戳的相互转换 | 日期时间对象转为Unix时间戳。 | to_unixtime智能转换函数,将日期时间对象或日期时间字符串转换为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语句
* | 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语句
* | extend time=cast(time as DOUBLE) | extend new_time=from_unixtime(time)
查询和分析结果
time: 1695191402 new_time:2023-09-20T06:30:02.000
日期时间对象和日期时间字符串的相互转换
处理函数
date_format
函数用于将timestamp类型的日期和时间对象转换为指定格式的日期和时间字符串。date_parse
函数用于将日期和时间字符串转换为指定格式的timestamp类型的日期和时间对象。
场景一:使用
date_format
将timestamp类型的日期和时间对象转换为指定格式的日期和时间字符串。原始日志
time: 2023-09-21 10:59:37.055
SPL语句
* | extend time=cast(time as TIMESTAMP) | extend new_time=date_format(time, '%H:%i:%s')
查询和分析结果
time: 2023-09-21 10:59:37.055 new_time: 10:59:37
场景二:使用
date_parse
将日期时间字符串转换为指定格式的timestamp类型的日期和时间对象。原始日志
time: 2022-10-19 15:46:05
SPL语句
* | extend time=cast(time as varchar) | extend new_time=date_parse(time, '%Y-%m-%d %H:%i:%s')
查询和分析结果
time: 2022-10-19 15:46:05 new_time: 2022-10-19 T15:46:05.000