SAP ABAP 时间戳 20210415

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也有一些实用方法
SAP ABAP 时间戳 20210415
应用举例:

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.

运行结果:
SAP ABAP 时间戳 20210415

上一篇:SAP-带组件转PO ,不使用BOM中的组件


下一篇:文案入门须知,不能说的2个秘密(下)