Get the time and date from a serverTag(s): Powerscript WinAPI/Registry
First we need these local function declarations
[local function declaration] FUNCTION ULONG GetTimeOfDayInfo & ( REF s_timeofday dest, ULONG source, ULONG size ) & LIBRARY "KERNEL32.DLL" ALIAS FOR "RtlMoveMemory" FUNCTION ULONG NetRemoteTOD & (REF CHAR server[], REF ULONG bufferPtr) LIBRARY "NETAPI32.DLL" FUNCTION ULONG LocalhostTOD & (ref long null, REF ULONG bufferPtr) LIBRARY "NETAPI32.DLL" & ALIAS FOR "NetRemoteTOD"
[s_timeofday structure] elapsedt uLong msecs uLong hours uLong mins uLong secs uLong hunds uLong timezone Long tinterval uLong day uLong month uLong year uLong weekday uLong
[powerscript] // ------------------------------------------------------------ of_StringToUnicode (String as_string, ref character ac_unicode[]) int li_loop, li_len, li_uni li_len = Len( as_string ) FOR li_loop = 1 TO li_len li_uni++ ac_unicode[ li_uni ] = Mid( as_string, li_loop, 1 ) li_uni++ ac_unicode[ li_uni ] = Char( 0 ) NEXT li_uni++ ac_unicode[ li_uni ] = Char( 0 ) li_uni++ ac_unicode[ li_uni ] = Char( 0 ) // ------------------------------------------------------------ datetime of_relativetimedate(datetime adt_start, long al_offset) // stolen from the PFC! datetime ldt_null date ld_sdate time lt_stime long ll_date_adjust long ll_time_adjust, ll_time_test //Initialize date and time portion ld_sdate = date(adt_start) lt_stime = time(adt_start) //Find out how many days are contained //Note: 86400 is # of seconds in a day ll_date_adjust = al_offset / 86400 ll_time_adjust = mod(al_offset, 86400) //Adjust date portion ld_sdate = RelativeDate(ld_sdate, ll_date_adjust) //Adjust time portion // Allow for time adjustments periods crossing over days // Check for time rolling forwards a day IF ll_time_adjust > 0 THEN ll_time_test = SecondsAfter(lt_stime,time('23:59:59')) IF ll_time_test < ll_time_adjust THEN ld_sdate = RelativeDate(ld_sdate,1) ll_time_adjust = ll_time_adjust - ll_time_test -1 lt_stime = time('00:00:00') END IF lt_stime = RelativeTime(lt_stime, ll_time_adjust) //Check for time rolling backwards a day ELSEIF ll_time_adjust < 0 THEN ll_time_test = SecondsAfter(lt_stime,time('00:00:00')) IF ll_time_test > ll_time_adjust THEN ld_sdate = RelativeDate(ld_sdate,-1) ll_time_adjust = ll_time_adjust - ll_time_test +1 lt_stime = time('23:59:59') END IF lt_stime = RelativeTime(lt_stime, ll_time_adjust) END IF RETURN (datetime(ld_sdate,lt_stime))
[powerscript] char lc_logonserver[] string ls_logonserver boolean lb_logonserver ulong ul_prtTimeOfDayInfo ulong ul_rc long ll_null s_timeofday lstr_timedate ContextKeyword lcxk_base String ls_result string ls_values[] datetime ldt_locale date ld_server time lt_server datetime ldt_server // get the logon server this.GetContextService("Keyword", lcxk_base) lcxk_base.GetContextKeywords("LOGONSERVER", ls_values) IF Upperbound(ls_values) > 0 THEN ls_logonserver = ls_values[1] // transform logon server to unicode of_StringToUnicode(ls_logonserver, lc_logonserver) lb_logonserver = true ELSE // lc_logonserver is null --> no server -> localhost lb_logonserver = false END IF // get the current time of day IF lb_logonserver THEN ul_rc = NetRemoteTOD(lc_logonserver, ul_prtTimeOfDayInfo) ELSE ll_null = 0 ul_rc = LocalhostTOD(ll_null, ul_prtTimeOfDayInfo) END IF // IF NOT ul_rc = 0 THEN MessageBox("Oups", String (ul_rc)) ELSE // convert to our structure GetTimeOfDayInfo(lstr_timedate, ul_prtTimeOfDayInfo, 48) ls_result = string(lstr_timedate.year) + "-" & + string(lstr_timedate.month) & + "-" + string(lstr_timedate.day) & + " " + string(lstr_timedate.hours) + ":" & + string(lstr_timedate.mins) & + ":" + string(lstr_timedate.secs) MessageBox("result before conversion" , ls_result ) // convert to local time taking into account the timezone ld_server = Date (string(lstr_timedate.year) + "-" & + string(lstr_timedate.month) + & "-" + string(lstr_timedate.day)) lt_server = Time (string(lstr_timedate.hours) + ":" & + string(lstr_timedate.mins) + & ":" + string(lstr_timedate.secs)) ldt_locale = of_relativeDatetime & (datetime(ld_server, lt_server), & - (lstr_timedate.timezone * 60)) Messagebox("result after conversion" , & String(ldt_locale, "yyyy-mm-dd hh:mm")) END IF
See also this HowTo
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com