时间戳是由日期和时间组成的一串数字串,时间戳的格式为YYYYMMDDHHMISS,比如2016.12.30 09:56:20转换成时间戳就是20161230095620。常用的转换方法如下:
1, concatenate转换
下面一个例子是将销售订单的创建日期和时间转换成时间戳,
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | DATA lv_vbeln TYPE vbeln VALUE '0100001418'. DATA lv_timestamp_string TYPE string. SELECT SINGLE erdat, erzet INTO @DATA(ls_datetime)  FROM vbak WHERE vbeln = @lv_vbeln. CONCATENATE ls_datetime-erdat+0(4)   ls_datetime-erdat+4(2)   ls_datetime-erdat+6(2)   ls_datetime-erzet+0(2)   ls_datetime-erzet+2(2)   ls_datetime-erzet+4(2)   INTO lv_timestamp_string. WRITE: ls_datetime-erdat, ls_datetime-erzet, lv_timestamp_string. | 
2, CONVERT转换
可以通过convert语句将日期+时间+时区 转变为 时间戳,
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | *&---------------------------------------------------------------------* *&      Form  date_to_timestamp *&---------------------------------------------------------------------* *       日期+时间+时区  转变为 时间戳 *----------------------------------------------------------------------* FORM date_to_timestamp USING i_date LIKE sy-datum                              i_time LIKE sy-uzeit                              i_tzone LIKE  tzonref-tzone                         CHANGING o_tstamp LIKE tzonref-tstamps  .   CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIME ZONE i_tzone.   CASE sy-subrc.     WHEN 8.       MESSAGE e000(oo) WITH '时区错'.     WHEN 12.       MESSAGE e000(oo) WITH '时间戳错误'.     WHEN OTHERS.   ENDCASE. ENDFORM.                    "date_to_timestamp | 
反过来也可以将时间戳转换为 日期 时间,
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | *&---------------------------------------------------------------------* *&      Form  TIMESTAMP_TO_DATE *&---------------------------------------------------------------------* *       时间戳+时区 转变为 日期和时间 *----------------------------------------------------------------------* FORM timestamp_to_date USING   i_tstamp LIKE tzonref-tstamps                                i_tzone LIKE  tzonref-tzone                        CHANGING o_date LIKE  sy-datum                                 o_time LIKE  sy-uzeit.   DATA: w_tzone LIKE tzonref-tzone.   w_tzone = i_tzone.   CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIME o_time.   CASE sy-subrc.     WHEN 8.       MESSAGE e000(oo) WITH '时区错'.     WHEN 12.       MESSAGE e000(oo) WITH '时间戳错误'.     WHEN OTHERS.   ENDCASE. ENDFORM.                    "TIMESTAMP_TO_DATE | 
3, IB_CONVERT_INTO_TIMESTAMP转换
下图CET是时区,

当然也可以通过IB_CONVERT_FROM_TIMESTAMP将时间戳转换为日期,时间。
以上。


发表评论