二维码

[基础语法] SAP中时间戳和日期时间的转换方法

Twilight发表于 2015-12-22 10:42Twilight 最后回复于 2015-12-22 10:42 [复制链接] 6565 0

在CRM系统标准表都是存储时间戳的,额传统的ECC一般都是存储时间和日期的,有时我们需要在这两者之间转换。

程序代码:
  1. TABLES: t001w,adrc .
  2. DATA: date LIKE sy-datum,
  3.       time LIKE sy-uzeit,
  4.       tstamp LIKE tzonref-tstamps.

  5. SELECT SINGLE * FROM t001w WHERE werks = 'D025'.
  6. IF sy-subrc = 0.
  7.   SELECT SINGLE * FROM adrc WHERE addrnumber = t001w-adrnr . "time_zone,捕获系统当前时区:sy-zonlo
  8.   PERFORM date_to_timestamp USING '20151225' '120708' adrc-time_zone
  9.               CHANGING tstamp.
  10.   WRITE '时间戳:'.
  11.   WRITE / :tstamp.
  12.   WRITE / :sy-uline.
  13. ENDIF.
  14. IF NOT tstamp IS INITIAL.
  15.   PERFORM timestamp_to_date USING tstamp adrc-time_zone
  16.               CHANGING date time.
  17.   WRITE / : '日期+时间:' .
  18.   WRITE / : date,time .
  19. ENDIF.

  20. *&---------------------------------------------------------------------*
  21. *&      Form  date_to_timestamp
  22. *&---------------------------------------------------------------------*
  23. *       日期+时间+时区  转变为 时间戳
  24. *----------------------------------------------------------------------*
  25. FORM date_to_timestamp USING i_date LIKE sy-datum
  26.                              i_time LIKE sy-uzeit
  27.                              i_tzone LIKE  tzonref-tzone
  28.                         CHANGING o_tstamp LIKE tzonref-tstamps  .
  29.   CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIME ZONE i_tzone.
  30.   CASE sy-subrc.
  31.     WHEN 8.
  32.       MESSAGE e000(oo) WITH '时区错'.
  33.     WHEN 12.
  34.       MESSAGE e000(oo) WITH '时间戳错误'.
  35.     WHEN OTHERS.
  36.   ENDCASE.
  37. ENDFORM.                    "date_to_timestamp

  38. *&---------------------------------------------------------------------*
  39. *&      Form  TIMESTAMP_TO_DATE
  40. *&---------------------------------------------------------------------*
  41. *       时间戳+时区 转变为 日期和时间
  42. *----------------------------------------------------------------------*
  43. FORM timestamp_to_date USING   i_tstamp LIKE tzonref-tstamps
  44.                                i_tzone LIKE  tzonref-tzone
  45.                        CHANGING o_date LIKE  sy-datum
  46.                                 o_time LIKE  sy-uzeit.
  47.   DATA: w_tzone LIKE tzonref-tzone.
  48.   w_tzone = i_tzone.
  49.   CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIME o_time.
  50.   CASE sy-subrc.
  51.     WHEN 8.
  52.       MESSAGE e000(oo) WITH '时区错'.
  53.     WHEN 12.
  54.       MESSAGE e000(oo) WITH '时间戳错误'.
  55.     WHEN OTHERS.
  56.   ENDCASE.
  57. ENDFORM.                    "TIMESTAMP_TO_DATE
复制代码


执行效果:
时间戳.jpg

获取系统当前时间戳:
  1.   DATA: lv_timestamp TYPE timestamp. "UTC Time Stamp in Short Form (YYYYMMDDhhmmss)
  2.   GET TIME STAMP FIELD lv_timestamp.
  3.   WRITE:/ lv_timestamp.
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表