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))