Many a time we as TM developer come across scenarios where we would have to do time conversions and for precise time conversion Time Zone is a very important entity.
we do either of the 2:
- Assume the time zone to be fetched from Location ID OR
- Assume the time zone to be Sy-Zonlo.
Assuming anything is always a problem which can lead to a defect UAT or an incident in the production system as the Expected resultant time would be different for different users.
This Blog will help you to identify when and which time zone we should/could use for Time conversion while coding in SAP TM which could help us in a precise conversion of time or timestamp values.
There are 3 scenarios for how a Time zone should/could be fetched and used are listed below, can be handled logically on the settings maintained for Particular UI.
- Time zone to be fetched from Location ID
- Time zone to be fetched from Sy-Zonlo
- Time zone to be fetched with respect to User.
Initially, we have to Fetch UI Display Settings using the following code.
Data: ls_dispsett TYPE /scmtms/s_ui_dispsett, "UI display Settings
ls_dispsett = /scmtms/cl_ui_dispsett=>get_user_settings ().
Method
GET_USER_SETTINGS of Class
/SCMTMS/CL_UI_DISPSETT will fetch the Display settings detail.
Structure Variable
LS_DISPSETT will hold the display settings for the current user returned by the standard method.
(
Note: This variable will hold other display related parameters as well which can be explored as it's not part of this document)
- Time zone to be fetched from Location ID
To identify if the Zone to be fetched is by using the Location ID we will require checking the “
LOC_SPEC_TZONE” field of the Structure Variable
LS_DISPSETTIf the condition satisfies we can use method
LOC_KEY_GET_TIMEZONE of helper class
/SCMTMS/CL_COMMON_HELPER to get the Zone
The following code can be referred as a sample for this scenario:
* Location Specific Time Zone
IF ls_dispsett-loc_spec_tzone = /scmtms/if_ui_cmn_c=>sc_loc_spec_tzone-consider.
“ timezone is determined from stop location
CALL METHOD /scmtms/cl_common_helper=>loc_key_get_timezone
EXPORTING
iv_loc_key = ls_stop_data_k-log_loc_uuid
RECEIVING
rv_timezone = lv_tz.
Endif.
- Time zone to be fetched from Sy-Zonlo
To identify if the Zone to be fetched is by using the system variable
SY-ZONLO we will require checking one of the two cases:
- PREF_TIMEZONE field of the Structure Variable LS_DISPSETT has value blank/space
- PREF_TIMEZONE field of the Structure Variable LS_DISPSETThas value X and INDIV_TIMEZONE filed is blank/initial.
The following code can be referred as a sample for this scenario:
*System Time Zone
IF ls_dispsett-pref_timezone = /scmtms/if_ui_cmn_c=>sc_pref_tzone-user “Sapce
OR
( ls_dispsett-pref_timezone = /scmtms/if_ui_cmn_c=>sc_pref_tzone-individual “X
AND
ls_dispsett-indiv_timezone IS INITIAL ).
lv_tz = sy-zonlo.
ENDIF.
- Time zone to be fetched with respect to User
To identify if the Zone to be fetched is the Zone preferred by User i.e User specific, we will require checking 1 condition i.e.
If
PREF_TIMEZONE field of the Structure Variable
LS_DISPSETT has value X and
INDIV_TIMEZONE field is not blank/initial.
The following code can be referred as a sample for this scenario:
* Preferred Time Zone: Individual
IF ls_dispsett-pref_timezone = /scmtms/if_ui_cmn_c=>sc_pref_tzone-individual
AND ls_dispsett-indiv_timezone IS NOT INITIAL.
lv_tz = ls_dispsett-indiv_timezone. “User maintained Time zone
ENDIF.