FM 将时间从 24 小时格式转换为 12 小时格式?

FM to convert time from 24hr to 12hr format?

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

我可以找到 CONVERT TIME STAMP 只接受 TIME 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.

我的objective是根据TimeZoneTimeFormat一起转换这个lv_timestampl

PS:我可以在 CONVERT TIME STAMP 语句后对 lv_time 进行 -12 操作并附加 PM/AM 但我正在寻找一种标准方法这样做。

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

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

好的,如果你找不到string templates help

,让我成为你今天的生活帮手

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

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

returns

19.02.2020 09:59:59,0000000

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

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

returns

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 ).

12h格式输出:

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 时间格式的输出,需要在 table USR01 aka [=21] 的 TIMEFM 字段中进行维护=] 或 table t005x 又名国家/地区设置(tcode OY01)。