'=========================================================================== ' Subject: VB DATE ROUTINES UPDATE Date: 10-11-99 (20:31) ' 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 ' by Dave Navarro, Jr. (dave@powerbasic.com) ' ' A VB time variable is stored as an 8-byte real value (double), representing ' a date between January 1, 1753 and December 31, 2078, inclusive. The value ' 2.0 represents January 1, 1900; 3.0 represents January 2, 1900, and so on. ' Adding 1 to the value increments the date by a day. The fractional part of ' the value represents the time of day. Therefore, 2.5 represents noon on ' Janurary 1, 1900; 3.25 represents 6:00 A.M. on January 2, 1900, and so on. ' Negative numbers represent the dates prior to December 30, 1899. ' ' '============================================================================== $IF %DEF(%pb_dll32) $COMPILE EXE $ENDIF $INCLUDE "WIN32API.INC" 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 Now() AS DOUBLE LOCAL st AS SYSTEMTIME LOCAL vbDate AS DOUBLE GetSystemTime st SystemTimeToVariantTime st, vbDate FUNCTION = vbDate 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