LOCAL lcTz, lcLocal, lcSystem, lnResult, ltDateTime >LOCAL lnYearL, lnMonthL, lnDowL, lnDayL, lnHourL, lnMinL, lnSecL, lnMsecL >LOCAL lnYearS, lnMonthS, lnDowS, lnDayS, lnHourS, lnMinS, lnSecS, lnMsecS > > >********** >* Declare functions >***** > DECLARE INTEGER GetTimeZoneInformation IN kernel32.dll STRING@ cTz172 > DECLARE INTEGER SystemTimeToTzSpecificLocalTime IN kernel32.dll STRING cTz172, STRING cSystem16, STRING@ cLocal16 > DECLARE INTEGER TzSpecificLocalTimeToSystemTime IN kernel32.dll STRING cTz172, STRING cLocal16, STRING@ cSystem16 > DECLARE INTEGER GetSystemTime IN kernel32.dll STRING@ cSystem16 > DECLARE INTEGER GetLocalTime IN kernel32.dll STRING@ cLocal16 > > >********** >* Grab the current time >***** > lcLocal = SPACE(16) > lcSystem = SPACE(16) > GetLocalTime(@lcLocal) > GetSystemTime(@lcSystem) > > >********** >* Break out the values within >***** >SET STEP ON > extract_time(lcLocal, @lnYearL, @lnMonthL, @lnDowL, @lnDayL, @lnHourL, @lnMinL, @lnSecL, @lnMsecL) > extract_time(lcSystem, @lnYearS, @lnMonthS, @lnDowS, @lnDayS, @lnHourS, @lnMinS, @lnSecS, @lnMsecS) > > >********** >* Get the time zone >***** > lcTz = SPACE(172) > lnResult = GetTimeZoneInformation(@lcTz) > DO CASE > CASE lnResult = 0 > * Unknown, error > CASE lnResult = 1 > * Standard > CASE lnResult = 2 > * Daylight savings > ENDCASE > > >********** >* Convert local to system time >***** > lcLocalToSystem = SPACE(16) > TzSpecificLocalTimeToSystemTime(lcTz, lcLocal, @lcLocalToSystem) >SET STEP ON > extract_time(lcLocalToSystem, @lnYearS, @lnMonthS, @lnDowS, @lnDayS, @lnHourS, @lnMinS, @lnSecS, @lnMsecS) > > >********** >* Convert system to local time >****** > lcSystemToLocal = SPACE(16) > SystemTimeToTzSpecificLocalTime(lcTz, lcSystem, @lcSystemToLocal) >SET STEP ON > extract_time(lcSystemToLocal, @lnYearL, @lnMonthL, @lnDowL, @lnDayL, @lnHourL, @lnMinL, @lnSecL, @lnMsecL) > > >********** >* Convert manual system time to local time >****** > ltDateTime = CTOT("11/18/2013 06:14:41PM") > stuff_time(@lcSystem, ltDateTime) > SystemTimeToTzSpecificLocalTime(lcTz, lcSystem, @lcSystemToLocal) >SET STEP ON > extract_time(lcSystemToLocal, @lnYearL, @lnMonthL, @lnDowL, @lnDayL, @lnHourL, @lnMinL, @lnSecL, @lnMsecL) > SUSPEND > > > > >FUNCTION extract_time >LPARAMETERS pcTime, pnYear, pnMonth, pnDow, pnDay, pnHour, pnMin, pnSec, pnMsec > pnYear = extract_16_bits(SUBSTR(pcTime, 1, 2)) > pnMonth = extract_16_bits(SUBSTR(pcTime, 3, 2)) > pnDow = extract_16_bits(SUBSTR(pcTime, 5, 2)) > pnDay = extract_16_bits(SUBSTR(pcTime, 7, 2)) > pnHour = extract_16_bits(SUBSTR(pcTime, 9, 2)) > pnMin = extract_16_bits(SUBSTR(pcTime, 11, 2)) > pnSec = extract_16_bits(SUBSTR(pcTime, 13, 2)) > pnMsec = extract_16_bits(SUBSTR(pcTime, 15, 2)) > > > > >FUNCTION stuff_time >LPARAMETERS pcTime, ptDateTime > pcTime = SPACE(16) > pcTime = STUFF(pcTime, 1, 2, stuff_16_bits(YEAR(ptDateTime))) > pcTime = STUFF(pcTime, 3, 2, stuff_16_bits(MONTH(ptDateTime))) > pcTime = STUFF(pcTime, 5, 2, stuff_16_bits(DOW(ptDateTime))) > pcTime = STUFF(pcTime, 7, 2, stuff_16_bits(DAY(ptDateTime))) > pcTime = STUFF(pcTime, 9, 2, stuff_16_bits(HOUR(ptDateTime))) > pcTime = STUFF(pcTime, 11, 2, stuff_16_bits(MINUTE(ptDateTime))) > pcTime = STUFF(pcTime, 13, 2, stuff_16_bits(SEC(ptDateTime))) > pcTime = STUFF(pcTime, 15, 2, stuff_16_bits(0)) > > > > >FUNCTION extract_16_bits >LPARAMETERS pcString > * Convert from raw binary into integer > RETURN ASC(pcString) + ASC(SUBSTR(pcString, 2)) * 256 > > > > >FUNCTION stuff_16_bits >LPARAMETERS pnValue > * Convert from raw binary into integer > RETURN CHR(BITAND(pnValue, 0xff)) + CHR(BITRSHIFT(pnValue, 8)) >