时间戳转换(Timestamp)
时间戳是由日期和时间组成的一串数字串,时间戳的格式为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将时间戳转换为日期,时间。
以上。