A little different approach, I think..
Code:
#COMPILE EXE #DIM ALL #REGISTER NONE #COMPILER PBWIN 9 ' Needed items from Win32API: TYPE SYSTEMTIME wYear AS WORD wMonth AS WORD wDayOfWeek AS WORD wDay AS WORD wHour AS WORD wMinute AS WORD wSecond AS WORD wMilliseconds AS WORD END TYPE DECLARE FUNCTION SystemTimeToVariantTime LIB "OLEAUT32.DLL" ALIAS "SystemTimeToVariantTime" (lpSystemTime AS SYSTEMTIME, vbtime AS DOUBLE) AS LONG ' IN : string, YYYYMMDD OUT: integer YYYYddd 'FUNCTION DateToJulian (YYYYMMDD AS STRING) AS LONG ' will not compile gets "variable expected" at YYYYMMDD FUNCTION DateToJulian (u_YYYYMMDD AS STRING) AS LONG LOCAL STdate, STNY AS SYSTEMTIME LOCAL vDate, vNY AS DOUBLE LOCAL iRet AS LONG, nDay AS LONG STDate.wDay = VAL (MID$(u_yyyymmdd,7,2)) STDate.wMonth = VAL (MID$(u_yyyymmdd,5,2)) STDate.WYear = VAL (LEFT$(u_yyyymmdd,4)) iRet = SystemTimeToVariantTime (STdate, vDate) IF ISFALSE iret THEN ' invalid date in FUNCTION= -1& EXIT FUNCTION END IF ' find variant date of Jan 1 this year STNY = STDATE STNY.wMonth = 1 STNY.wDay = 1 Iret = SystemTimeToVariantTime (STNY, vNY) nDay = FIX (vDate) - FIX (vNY) + 1 ' number of days between 'date' and Newyears + 1 for inclusive FUNCTION = STDate.wYear * 1000& + nDay END FUNCTION FUNCTION PBMAIN() AS LONG LOCAL uDate AS STRING, sTxt AS STRING LOCAL iret AS LONG DO uDate = INPUTBOX$ ("Enter yyyymmdd", "Julian Date Testing") IF uDate = "" THEN EXIT DO ELSE iret = DateToJulian (uDate) IF IRet = -1& THEN stxt = USING$("'&' is an Invalid yyyymmdd", udate) ELSE stxt = USING$ ("yyyymmdd '&' ==> #", uDate, iRet) END IF MSGBOX sTxt, , "Julian Date Results" END IF LOOP END FUNCTION
Leave a comment: