转载-时间戳转换

时间:2022-10-06 02:37:09

http://www.baidusap.com/abap/report/2579

时间戳是由日期和时间组成的一串数字串,时间戳的格式为YYYYMMDDHHMISS,比如2016.12.30  09:56:20转换成时间戳就是20161230095620。常用的转换方法如下:

1, concatenate转换

下面一个例子是将销售订单的创建日期和时间转换成时间戳,

ABAP

 

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语句将日期+时间+时区  转变为 时间戳,

ABAP

 

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

反过来也可以将时间戳转换为 日期 时间,

ABAP

 

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是时区,

<img class="alignnone size-full wp-image-2580" src="http://www.baidusap.com/wp-content/uploads/2016-12-30_9-23-53.png" alt="2016-12-30_9-23-53" width="693" height="370" />

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

以上。