There was a case where i need to get this kind of output hh:mm:ssZ where Z stands for UTC Time Zone (20:15:00+0200) to the external system for integration.
For Instance, the current time zone in the system is UTC +02:00 and we need to get this value (+0200) from Navision. There are no predefined functions to get this value so for that i have created a new function GetUTCOffset which can be used to get the UTC offset.
LOCAL PROCEDURE GetUTCOffset@5() : Text;
VAR
lLocalTime@1004 : Time;
lUTCTime@1000 : Time;
lDateTimeTxt@1003 : Text;
lTimeTxt@1001 : Text;
lTimeDiffTxt@1002 : Text;
lSign@1005 : Text;
BEGIN
//GetUTCOffset
EVALUATE(lLocalTime,'17:00');
lDateTimeTxt := FORMAT(CREATEDATETIME(TODAY,lLocalTime),0,9);
lTimeTxt := COPYSTR(lDateTimeTxt,STRPOS(lDateTimeTxt,'T') + 1);
lTimeTxt := COPYSTR(lTimeTxt,1,STRLEN(lTimeTxt) - 1);
EVALUATE(lUTCTime,lTimeTxt);
lTimeDiffTxt := FORMAT((lLocalTime - lUTCTime) / 3600);
lSign := '+';
IF lTimeDiffTxt[1] = '-' THEN BEGIN
lSign := '-';
lTimeDiffTxt := DELCHR(lTimeDiffTxt,'=','-');
END;
EVALUATE(lLocalTime,lTimeDiffTxt);
EXIT(FORMAT(lLocalTime,0,lSign + '<hours24,2><minutes,2>'));
END;
Output:
If the Time zone is UTC +02:00 then the Output will be +0200
If the Time zone is UTC +02:00 and we have DST (Daylight Saving Time) then the Output will be +0300
If the Time zone is UTC +02:00 then the Output will be +0200
If the Time zone is UTC +02:00 and we have DST (Daylight Saving Time) then the Output will be +0300
Note:
I have formatted the final output of the Time to remove the “:” using the below code.
FORMAT(lLocalTime,0,lSign + '<Hours24,2><Minutes,2>')
You can format the output per your requirement.
I have formatted the final output of the Time to remove the “:” using the below code.
FORMAT(lLocalTime,0,lSign + '<Hours24,2><Minutes,2>')
You can format the output per your requirement.
Please do let me know if in case there are some issues & suggestion about the code & approach. Thanks
No comments:
Post a Comment