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

时间:2020-02-19 06:24:51

标签: sap abap function-module

我必须根据用户设置来格式化{strong> UTC 中的DateTime,包括其时区(CET / IST等)和时间格式(24hr / 12hr)。

我可以找到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.

我的目标是将基于lv_timestamplTimeZone的{​​{1}}一起转换。

PS:我可以在TimeFormat语句之后对-12进行lv_time操作,并附加CONVERT TIME STAMP,但我正在寻找一种标准的方法。

2 个答案:

答案 0 :(得分:1)

好吧,如果您找不到string templates help,请允许我今天作为您的生活帮助。

将时间戳转换为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 ).

以12h格式输出:

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

以24h格式输出:

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

对于AM / PM时间格式的输出,需要将其保留在表USR01User settings或表t005x或国家(地区)的字段 TIMEFM 中设置(tcode OY01)。

答案 1 :(得分:0)

FM HRVE_CONVERT_TIME可用于两种转换(将12hr转换为24h,将24hr转换为12hr)。

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