全部產品
Search
文件中心

Simple Log Service:處理日期時間

更新時間:Aug 29, 2025

處理日期時間,將方便您對日誌後續查詢與可視化展示。本文向您介紹使用轉換函式進行日期時間資料類型轉換。

概念解釋

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
  • 情境二:使用to_unixtime轉換函式,將帶時區的日期時間對象或日期時間字串轉換為Unix時間戳記。

    • 原始日誌

      time: 2024-03-13_16:44:58.800+0800
    • SPL語句

      * | extend new_time=replace(replace(time, '+0800', ''), '_', ' ') | extend new_time = cast(to_unixtime(cast(new_time as TIMESTAMP)) as bigint) - 28800
    • 查詢和分析結果

      time:2024-03-13_16:44:58.800+0800
      new_time:1710319499
  • 情境三:使用from_unixtime轉換函式,將Unix時間戳記轉化無時區的timestamp類型的日期和時間。

    • 原始日誌

      time:1695191402
    • SPL語句

      * | extend new_time=from_unixtime(cast(time as DOUBLE))
    • 查詢和分析結果

      time: 1695191402
      new_time:2023-09-20 06:30:02.000
    • 情境四:使用from_unixtime轉換函式,將Unix時間戳記轉化帶時差的timestamp類型的日期和時間。

      • 原始日誌

        time:1695191402
      • SPL語句

        * | extend new_time=from_unixtime(cast(time as DOUBLE) + 28800)
      • 查詢和分析結果

        time:1695191402
        new_time:2023-09-20 14: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 15:46:05.000