'=========================================================================== ' Subject: DEALING W/VB DATES IN PB Date: 02-15-99 (20:25) ' Author: Dave Navarro, Jr. Code: PBCC, PBDLL ' Origin: dave@powerbasic.com Packet: PBCC.ABC '=========================================================================== '============================================================================== ' ' Dealing with Visual Basic dates in PowerBASIC ' Compatible with both PB/CC and PB/DLL ' '============================================================================== $IF %DEF(%pb_dll32) $COMPILE EXE $ENDIF %NULL = 0 TYPE SYSTEMTIME wYear AS INTEGER wMonth AS INTEGER wDayOfWeek AS INTEGER wDay AS INTEGER wHour AS INTEGER wMinute AS INTEGER wSecond AS INTEGER wMilliseconds AS INTEGER END TYPE DECLARE FUNCTION VarDateFromStr LIB "OLEAUT32.DLL" ALIAS "VarDateFromStr" (BYVAL OleString AS LONG, BYVAL lcid AS LONG, BYVAL dwFlags AS LONG, pDate AS DOUBLE) AS LONG DECLARE FUNCTION VariantTimeToSystemTime LIB "OLEAUT32.DLL" ALIAS "VariantTimeToSystemTime" (BYVAL vbtime AS DOUBLE, lpSystemTime AS SYSTEMTIME) AS LONG DECLARE FUNCTION GetDateFormat LIB "KERNEL32.DLL" ALIAS "GetDateFormatA" (BYVAL Locale AS LONG, BYVAL dwFlags AS LONG, lpDate AS SYSTEMTIME, lpFormat AS ASCIIZ, lpDateStr AS ASCIIZ, BYVAL cchDate AS LONG) AS LONG DECLARE FUNCTION GetTimeFormat LIB "KERNEL32.DLL" ALIAS "GetTimeFormatA" (BYVAL Locale AS LONG, BYVAL dwFlags AS LONG, lpTime AS SYSTEMTIME, lpFormat AS ASCIIZ, lpTimeStr AS ASCIIZ, BYVAL cchTime AS LONG) AS LONG FUNCTION uString(BYVAL x AS STRING) AS STRING LOCAL y AS STRING LOCAL n AS INTEGER IF LEN(x) THEN FOR n = 1 TO LEN(x) y = y + MKI$(ASC(x, n)) NEXT n END IF FUNCTION = y END FUNCTION FUNCTION StrToVbDate(BYVAL dt AS STRING) AS DOUBLE LOCAL vbdate AS DOUBLE dt = uString(dt) IF ISFALSE(VarDateFromStr(BYVAL STRPTR(dt), 0, 0, vbdate)) THEN FUNCTION = vbdate END IF END FUNCTION FUNCTION VbDateToStr(BYVAL vbdate AS DOUBLE) AS STRING LOCAL d AS ASCIIZ * 64 LOCAL dt AS STRING LOCAL st AS SYSTEMTIME VariantTimeToSystemTime vbdate, st GetDateFormat 0, 1, st, BYVAL %NULL, d, 64 dt = d GetTimeFormat 0, 12, st, BYVAL %NULL, d, 64 dt = dt & " " & d FUNCTION = dt END FUNCTION '------------------------------------------------------------------------------ FUNCTION PbMain() LOCAL dt AS STRING LOCAL vb AS DOUBLE dt = "March 20, 1967 11:46:00" vb = StrToVbDate(dt) $IF %DEF(%pb_cc32) PRINT dt; " ="; vb $ELSE MsgBox dt & " =" & STR$(vb) $ENDIF dt = VbDateToStr(vb) $IF %DEF(%pb_cc32) PRINT vb; "= "; dt $ELSE MsgBox STR$(vb) & " = " & dt $ENDIF END FUNCTION