UTC(UTC, Universal Time Coordinated,通用协调时)时间戳,分为长时间戳和短时间戳,其中长时间戳参考的系统数据元素TIMESTAMPL,类型为DEC(21,7),长格式的 UTC 时戳 (YYYYMMDDhhmmss,mmmuuun);而短时间戳参考的系统数据元素为TIMESTAMP,类型为DEC(15,0),简短格式的 UTC 时戳 (YYYYMMDDhhmmss)。
系统预留(系统结构为SYST,程序默认结构为SY)的时间变量:
应用服务器日期:SY-DATUM
应用服务器时间:SY-UZEIT
应用服务器时区(INT4):SY-TZONE;
夏令时标识:SY-DAYST
用户本地日期:SY-DATLO
用户本地时间:SY-TIMLO
用户本地时区(CHAR6):SY-ZONLO
进行时间戳与日期、时间进行转换的系统函数:
根据制定的日期、时间、时区生成时间戳: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
更多的:事务码SE37 模糊匹配TIMESTAMP可以查到大量的相关函数;类CL_ABAP_TSTMP也有一些实用方法
应用举例:
DATA: LV_DATUM TYPE SY-DATUM,
LV_UZEIT TYPE SY-UZEIT,
LV_TIMESTAMP_LOL TYPE TIMESTAMPL, "时间戳(长时间戳)
LV_TIMESTAMP_LOS TYPE TZONREF-TSTAMPS, "时间戳(短时间戳)
LV_TIMESTAMP TYPE TZONREF-TSTAMPS, "时间戳(短时间戳)
LV_ISO8601 TYPE STRING, "时间戳(ISO)
LV_TIMESTAMP_ASS TYPE TZONREF-TSTAMPS, "时间戳(短时间戳)
LV_DATE TYPE SY-DATUM,
LV_TIME TYPE SY-UZEIT,
LV_DAYST TYPE SY-DAYST.
LV_DATUM = SY-DATUM.
LV_UZEIT = SY-UZEIT.
"1、获取当前时间戳
"获取当前时间戳(长时间戳)
GET TIME STAMP FIELD LV_TIMESTAMP_LOL.
"获取当前时间戳(短时间戳)
GET TIME STAMP FIELD LV_TIMESTAMP_LOS.
"2、使用CONVERT DATE生成指定时间(当前服务器时间)的时间戳 SY-DATLO SY-TIMLO
*CONVERT DATE dat
* [TIME tim [DAYLIGHT SAVING TIME dst]]
* INTO TIME STAMP time_stamp TIME ZONE tz.
*dat 指定的日期(DATS类型) tim 指定的时间(TIMS类型) dst 夏令时标志(CHAR1类型,SPACE或X)
*time_stamp (时间戳 DEC(15,0)类型) tz 时区(CHAR06类型)
CONVERT DATE LV_DATUM TIME LV_UZEIT
INTO TIME STAMP LV_TIMESTAMP_ASS TIME ZONE SY-ZONLO.
"3、使用CONVERT TIME STAMP获取(当前服务器时间)时间戳对应的日期和时间、夏令时信息
*CONVERT TIME STAMP time_stamp TIME ZONE tz
* INTO [DATE dat]
* [TIME tim] [DAYLIGHT SAVING TIME dst].
*dat 指定的日期(DATS类型) tim 指定的时间(TIMS类型) dst 夏令时标志(CHAR1类型,SPACE或X)
*time_stamp (时间戳 DEC(15,0)类型) tz 时区(CHAR06类型)
CONVERT TIME STAMP LV_TIMESTAMP_ASS TIME ZONE SY-ZONLO
INTO DATE LV_DATE TIME LV_TIME DAYLIGHT SAVING TIME LV_DAYST.
"4、ISO时间戳
CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
EXPORTING
I_DATLO = '20210325'
I_TIMLO = '090506'
I_TZONE = SY-ZONLO
IMPORTING
E_TIMESTAMP = LV_TIMESTAMP.
CALL METHOD CL_XLF_DATE_TIME=>CREATE
EXPORTING
TIMESTAMP = LV_TIMESTAMP
RECEIVING
ISO8601 = LV_ISO8601.
WRITE: / '当前服务器时间',LV_DATUM,LV_UZEIT.
WRITE: / '当前用户的时区',SY-ZONLO,'当前服务器时区',SY-TZONE.
WRITE: / '1、获取当前时间戳'.
WRITE: / '当前时间戳(短)',LV_TIMESTAMP_LOS,
/ '当前时间戳(长)',LV_TIMESTAMP_LOL.
WRITE: / '2、使用CONVERT DATE生成指定时间(当前服务器时间)的时间戳'.
WRITE: / '指定时间的时间戳(短)',LV_TIMESTAMP_ASS.
WRITE: / '3、使用CONVERT TIME STAMP获取(当前服务器时间)时间戳对应的日期和时间、夏令时信息'.
WRITE: / '指定时间戳(短)的时间信息',LV_DATE,LV_TIME,LV_DAYST.
WRITE: / '4、指定时间2021.03.25 09:05:06 时区UTC+8(SY-ZONLO)对应的ISO时间戳'.
WRITE: / '当前时间戳(短) ',LV_TIMESTAMP,
/ '当前时间戳(ISO)',LV_ISO8601.
运行结果: