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

Advertisements

2 thoughts on “How to calculate the current UTC Time Zone from Navision?

  1. Thanks for the code. Haven’t run into a problem, I would suggest making a few changes to prevent problems with different localized formatting.

    Change:
    EVALUATE(lLocalTime,’17:00′);
    to:
    lLocalTime := 1000T;

    I think the evaluate function takes into account system settings about localized time formats. It may fail depending on which country you are. Using 1000T is universal. I changed time from 17:00 to 10:00 because it looks safer to me to not run into problems when times are defined with AM/PM.

    Like

    • Hi JP,
      Thanks for the review. I have tested the code with both the values (17:00 & 1000T) with different regional settings and it works fine,as the time is parsed based on the regional settings.

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s