我想将时间(SY-TIMLO)格式化为SU01中的用户定义格式.对于美国用户,这通常涉及AM/PM.我发现最简单的方法是:
lv_formatted_time = |{ lv_time TIME = USER }|
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以在不使用下面更广泛的方法的情况下删除秒数?
*-- Convert time to user time format based on environment setting.
*-- As we are not using SET COUNTRY this has the same effect as
*-- user settings in SU01 > Defaults > Time Format. US users will see AM/PM.
CALL METHOD CL_ABAP_TIMEFM=>CONV_TIME_INT_TO_EXT
EXPORTING
TIME_INT = lv_time
WITHOUT_SECONDS = ABAP_TRUE
FORMAT_ACCORDING_TO = CL_ABAP_TIMEFM=>ENVIRONMENT
IMPORTING
TIME_EXT = lv_formatted_time.
Run Code Online (Sandbox Code Playgroud)
据我所知,使用字符串模板不可能做到这一点。我建议坚持您已经提到的方法。如果您有兴趣缩短代码,并且由于您可能总是使用相同的值WITHOUT_SECONDS和FORMAT_ACCORDING_TO,您可以将其包装在带有返回参数的方法中,以便您的代码将包含类似的行
lv_formatted_time = format_time_wo_seconds( lv_time ).
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用宏 - 我不是这些模块化的忠实粉丝,但这是它们确实派上用场的地方之一:
DEFINE format_time_short.
CALL METHOD CL_ABAP_TIMEFM=>CONV_TIME_INT_TO_EXT
EXPORTING
TIME_INT = &1
WITHOUT_SECONDS = ABAP_TRUE
FORMAT_ACCORDING_TO = CL_ABAP_TIMEFM=>ENVIRONMENT
IMPORTING
TIME_EXT = &2.
END-OF-DEFINITION.
format_time_short lv_time lv_formatted_time.
Run Code Online (Sandbox Code Playgroud)