1

我必须根据用户设置格式化UTCDateTime ,其中包括其时区(CET/IST 等)和时间格式(24 小时/12 小时)。

我可以找到CONVERT TIME STAMPTIME ZONE作为参数并进行转换的语句:

DATA: lv_timestampl TYPE timestampl VALUE '20200219095959.0000000',
      lv_date       TYPE d,
      lv_time       TYPE t.
CONVERT TIME STAMP lv_timestampl TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time.

我的目标是lv_timestampl基于TimeZoneTimeFormat一起转换它。

PS:我可以-12lv_timeafterCONVERT TIME STAMP语句进行操作并附加PM/AM,但我正在寻找一种标准的方法。

4

2 回答 2

1

好的,如果您找不到字符串模板帮助,今天就让我成为您的生活帮助

将时间戳转换为 UTC 的模板:

DATA(ld_tims_utc) = |{ lv_timestampl TIMESTAMP = ENVIRONMENT }|.

返回

19.02.2020 09:59:59,0000000

将时间戳转换为明确指定的时区的模板:

DATA(ld_tims_zone) = |{ lv_timestampl TIMESTAMP = ENVIRONMENT TIMEZONE = 'CET' }|.

返回

19.02.2020 10:59:59,0000000

从时间戳获取时间和日期(不是timestampl,所以需要转换):

cl_abap_tstmp=>systemtstmp_utc2syst( EXPORTING
                                       utc_tstmp = CONV timestamp( lv_timestampl )
                                     IMPORTING
                                       syst_date = lv_date
                                       syst_time = lv_time ).

以 12 小时格式输出:

SET COUNTRY 'US'.
DATA(time_us) = |{ lv_time TIME = ENVIRONMENT }|. "gives 01:55:43 PM

以 24 小时格式输出:

SET COUNTRY 'DE'.
DATA(time_de) = |{ lv_time TIME = ENVIRONMENT }|. "gives 13:55:43

对于 AM/PM 时间格式的输出,它们需要在表(即用户设置)或表(即国家/地区设置)的字段TIMEFM中维护(tcode OY01)。USR01t005x

于 2020-02-19T10:14:58.993 回答
0

FM HRVE_CONVERT_TIME 可用于两种方式的转换(将 12 小时转换为 24 小时,将 24 小时转换为 12 小时)。

您可以将结果与您已经找到的 FM 结合起来。

于 2020-02-19T09:02:48.697 回答