Showing posts with label UTC. Show all posts
Showing posts with label UTC. Show all posts

Thursday, 18 May 2017

How to calculate the current UTC Time Zone from Navision?

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
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.
Please do let me know if in case there are some issues & suggestion about the code & approach. Thanks