我必须根据用户设置来格式化{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_timestampl
和TimeZone
的{{1}}一起转换。
PS:我可以在TimeFormat
语句之后对-12
进行lv_time
操作,并附加CONVERT TIME STAMP
,但我正在寻找一种标准的方法。
答案 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时间格式的输出,需要将其保留在表USR01
或User settings或表t005x
或国家(地区)的字段 TIMEFM 中设置(tcode OY01)。
答案 1 :(得分:0)
FM HRVE_CONVERT_TIME可用于两种转换(将12hr转换为24h,将24hr转换为12hr)。
您可以将结果与已经找到的FM相结合。