UTC(UTC, Universal Time Coordinated,通用協調時)時間戳,分為長時間戳和段時間戳,其中長時間戳餐開始的系統的數據元素TIMESTAMPL,類型為DEC(21,7);而段時間戳參考的系統數據元素為TIMESTAMP,類型為DEC(15,0)。下文中如果沒有特指,一般都指的短時間戳。
1、獲取當前時間戳
GET TIME STAMP FIELD timestamp.
獲取當前系統的時間戳(這里的時間戳可以是長類型,也可以是短類型)
示例:
GET TIIME STAMP FIELD lv_timestamp.
2、使用CONVERT DATE生成指定時間的時間戳
CONVERT DATE date
[TIME time [DAYLIGHT SAVING TIME dst] ]
INTO TIME STAMP time_stamp TIME ZONE tz.
根據指定的日期、時間(可選是否為夏令時)和時區生成時間戳,其中[]圈起來的參數為可選參數,參數解釋如下:
date:指定的日期(DATS類型)
time:指定的時間(TIMS類型)
dst:夏令時標志(CHAR1類型)
time_stamp:(時間戳 DEC(15,0)類型)
tz:時區(CHAR06類型)
系統預留(系統結構為SYST,程序默認結構為SY)的時間變量有:
- SY-DATUM:應用服務器日期;
- SY-UZEIT:應用服務器時間;
- SY-TZONE:應用服務器時區(INT4);
- SY-DAYST:夏令時;
- SY-DATLO:用戶本地日期;
- SY-TIMLO:用戶本地時間;
- SY-ZONLO:用戶本地時區(CHAR6)。
【注意】在實際測試過程中,即使手動調整本地電腦的時間為費正確的時間,發現系統用戶本地時間和服務器時間對應的系統變量的值是一樣的(正確的時間值),並不是真正的本地時間,可能是因為時區相同,沒有測出差別。
調用示范:
CONVERT DATE SY-DATLO TIME SY-TIMLO
INTO TIME STAMP DATA(LV_TIMESTAMP) TIME ZONE SY-ZONLO.
3、使用CONVERT TIME STAMP獲取時間戳對應的日期和時間信息
CONVERT TIME STAMP time_stamp
TIME ZONE tz
INTO [DATE date]
[TIME time] [DAYLIGHT SAVING TIME dst].
根據制定的時間戳和時區,獲取對應的日期、時間、夏令時信息,其中[]圈起來的參數為可選參數,參數解釋如下:
time_stamp:(時間戳 DEC(15,0)類型)
tz:時區(CHAR06類型)
date:指定的日期(DATS類型)
time:指定的時間(TIMS類型)
dst:夏令時標志(CHAR1類型)
調用示范:
DATA: LV_TIMESTAMP TYPE TIMESTAMP VALUE '20190109112320'.
CONVERT TIME STAMP LV_TIMESTAMP TIME ZONE SY-ZONLO
INTO DATE DATA(LV_DATE)
TIME DATA(LV_TIME).
4、使用系統函數來進行時間戳來與日期和時間進行轉換
系統中有大量的根據日期、時間、時區與時間戳進行互轉的函數,只需要在SE37下模糊匹配“*TIMESTAMP*”就可以查到大量的有用函數,以下為常見的幾個函數:
- 根據制定的日期、時間、時區生成時間戳:IB_CONVERT_INTO_TIMESTAMP
- 根據制定的時間戳和時區轉化成日期、時間:IB_CONVERT_FROM_TIMESTAMP
- 把指定區域的時間戳轉化成日期和時間:LTRM_TIMESTAMP_CONVERT_FROM
- 把指定區域的日期和時間轉化成時間戳:LTRM_TIMESTAMP_CONVERT_INTO
- 把指定的日期和時間轉化成時間戳(默認本地時區):ABI_TIMESTAMP_CONVERT_FROM
- 把指定的時間戳轉化成日期和時間(默認本地時區):ABI_TIMESTAMP_CONVERT_INTO
- 獲取指定的遠程系統的時間戳:RSWR_TIMESTAMP_GET
實際上,通過查看這些函數的代碼可以發現,其實本質最核心的代碼還是調用CONVERT語句,因此只需要掌握CONVRT語句即可快速互轉時間戳與日期時間信息。
調用示范:
DATA: LV_TIMESTAMP TYPE TIMESTAMP.
CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
EXPORTING
I_DATLO = SY-DATLO
I_TIMLO = SY-TIMLO
I_TZONE = SY-ZONLO
IMPORTING
E_TIMESTAMP = LV_TIMESTAMP.