OK Now that I understand MOD I still do not understand why there is a bug in this code.
This App produces an ascii file of julian dates and days of the week from 97 - 04 that is perfect except for one day - Feb 24 2000!
I cant figure it out.
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
'Description : Day Of week From Julian Date Bug
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
#COMPILE EXE "DateTest.exe"
GLOBAL Jstart AS LONG, Date AS LONG, DayStr AS STRING, CalDateStr AS STRING
GLOBAL Day AS LONG, Jul AS LONG, Julerror AS LONG, CalDate AS LONG, hFile2 AS LONG
GLOBAL DestFile AS STRING, i AS LONG
'************************************************************************
' Converts TradeStation Date (Y)YYMMDD (LONG) to Julian Date (LONG)
'************************************************************************
FUNCTION DateToJulian( BYVAL TSDate AS LONG ) AS LONG
LOCAL Year AS DWORD, Day AS DWORD, Month AS DWORD, Gregorian AS DWORD
LOCAL JulYear AS LONG, JulMonth AS LONG, Adjust AS LONG, JulDate AS LONG
Gregorian = 588829
Year = 1900 + FIX(TSDate/10000)
Month = FIX((TSDate - FIX(TSDate/10000)*10000)/100)
Day = TSDate - FIX(TSDate/100)*100
IF ( Month > 2 ) THEN
JulYear = Year
JulMonth = Month + 1
ELSE
JulYear = Year - 1
JulMonth = Month + 13
END IF
JulDate = ( INT( 365.25 * JulYear ) + INT( 30.6001 * JulMonth ) + Day + 1720995 )
IF ( Day + ( 31 * ( Month + ( 12 * Year ) ) ) ) >= Gregorian THEN
Adjust = INT( 0.01 * JulYear )
JulDate = ( JulDate + 2 - Adjust + INT( 0.25 * Adjust ) )
END IF
DateToJulian = JulDate
END FUNCTION
'************************************************************************
' Converts Julian Date (LONG) to TradeStation Date (Y)YYMMDD (LONG)
'************************************************************************
FUNCTION JulianToDate( BYVAL JulDate AS LONG ) AS LONG
LOCAL Year AS DWORD, Day AS DWORD, Month AS DWORD, Gregorian AS DWORD
LOCAL JulA AS LONG, Jul_Alpha AS LONG, JulB AS LONG, JulC AS LONG', TSDate AS LONG
LOCAL JulD AS LONG, JulE AS LONG, CalDate AS DWORD
Gregorian = 2299161
IF ( JulDate >= Gregorian ) THEN
Jul_Alpha = INT( ( ( JulDate - 1867216 ) - 0.25 ) / 36524.25 )
JulA = ( JulDate + 1 + Jul_Alpha - INT( 0.25 * Jul_Alpha ) )
ELSE
JulA = JulDate
END IF
JulB = JulA + 1524
JulC = INT( 6680! + ( ( JulB - 2439870 ) - 122.1 ) / 365.25 )
JulD = INT( 0.25 * JulC ) + ( 365 * JulC )
JulE = INT( ( JulB - JulD ) / 30.6001 )
Day = JulB - JulD - INT( 30.6001 * JulE )
Month = JulE - 1
IF ( Month > 12 ) THEN Month = Month - 12
Year = JulC - 4715
IF ( Month > 2 ) THEN Year = Year - 1
JulianToDate = CLNG( (Year-1900)*10000 + Month*100 + Day )
END FUNCTION
'************************************************************************
' JulianToDate - Converts TradeStation Date (LONG) to Day of Week (LONG)
'************************************************************************
FUNCTION DayOfWeek( BYVAL TDate AS LONG ) AS LONG
LOCAL TSDateJul AS LONG
TSDateJul = DateToJulian(TDate)
DayOfWeek = TSDateJul MOD 7
END FUNCTION
'************************************************************************
' DateToJulian - Converts TSdate (Y)YYMMDD to Calendar Date (LONG)
'************************************************************************
FUNCTION TStoCalDate( BYVAL TSDate AS LONG ) AS LONG
TStoCalDate = 1900 + (TSDate/10000 - INT(TSDate/10000))*100000000 + INT(TSDate/10000)
END FUNCTION
'************************************************************************
FUNCTION PBMAIN
DestFile = "Dates.txt
hFile2 = FREEFILE
OPEN DestFile FOR OUTPUT AS hFile2 ' Create/Overwrite output file
Jstart = DateToJulian(970101)
FOR i = Jstart TO Jstart + 2900
Date = JulianToDate(i)
CalDate = TStoCalDate(Date)
CalDateStr = TRIM$(STR$(CalDate))
IF LEN(CalDateStr) < 8 THEN CalDateStr = "0"+CalDateStr
CalDateStr = LEFT$(CalDateStr,2)+"/"+LEFT$(RIGHT$(CalDateStr,6),2)+"/"+RIGHT$(CalDateStr,4)
Day = DayOfWeek(i)
Jul = DateToJulian(Date)
SELECT CASE Day
CASE 0 : DayStr = "Sunday -----"
CASE 1 : DayStr = "Mon"
CASE 2 : DayStr = "Tues"
CASE 3 : DayStr = "Wed"
CASE 4 : DayStr = "Thur"
CASE 5 : DayStr = "Fri"
CASE 6 : DayStr = "Sat"
END SELECT
JulError = i - Jul
IF JulError > 0 THEN MSGBOX("ERROR !!!!")
PRINT# hFile2, "Julian "+STR$(i)+" Date "+STR$(Date)+" CalDate "+_
CalDateStr+" Day "+DayStr ' Write a line
NEXT
CLOSE #hFile2 ' Close Output file
MSGBOX("Finished")
END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
------------------
Kind Regards
Mike
This App produces an ascii file of julian dates and days of the week from 97 - 04 that is perfect except for one day - Feb 24 2000!
I cant figure it out.
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
'Description : Day Of week From Julian Date Bug
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
#COMPILE EXE "DateTest.exe"
GLOBAL Jstart AS LONG, Date AS LONG, DayStr AS STRING, CalDateStr AS STRING
GLOBAL Day AS LONG, Jul AS LONG, Julerror AS LONG, CalDate AS LONG, hFile2 AS LONG
GLOBAL DestFile AS STRING, i AS LONG
'************************************************************************
' Converts TradeStation Date (Y)YYMMDD (LONG) to Julian Date (LONG)
'************************************************************************
FUNCTION DateToJulian( BYVAL TSDate AS LONG ) AS LONG
LOCAL Year AS DWORD, Day AS DWORD, Month AS DWORD, Gregorian AS DWORD
LOCAL JulYear AS LONG, JulMonth AS LONG, Adjust AS LONG, JulDate AS LONG
Gregorian = 588829
Year = 1900 + FIX(TSDate/10000)
Month = FIX((TSDate - FIX(TSDate/10000)*10000)/100)
Day = TSDate - FIX(TSDate/100)*100
IF ( Month > 2 ) THEN
JulYear = Year
JulMonth = Month + 1
ELSE
JulYear = Year - 1
JulMonth = Month + 13
END IF
JulDate = ( INT( 365.25 * JulYear ) + INT( 30.6001 * JulMonth ) + Day + 1720995 )
IF ( Day + ( 31 * ( Month + ( 12 * Year ) ) ) ) >= Gregorian THEN
Adjust = INT( 0.01 * JulYear )
JulDate = ( JulDate + 2 - Adjust + INT( 0.25 * Adjust ) )
END IF
DateToJulian = JulDate
END FUNCTION
'************************************************************************
' Converts Julian Date (LONG) to TradeStation Date (Y)YYMMDD (LONG)
'************************************************************************
FUNCTION JulianToDate( BYVAL JulDate AS LONG ) AS LONG
LOCAL Year AS DWORD, Day AS DWORD, Month AS DWORD, Gregorian AS DWORD
LOCAL JulA AS LONG, Jul_Alpha AS LONG, JulB AS LONG, JulC AS LONG', TSDate AS LONG
LOCAL JulD AS LONG, JulE AS LONG, CalDate AS DWORD
Gregorian = 2299161
IF ( JulDate >= Gregorian ) THEN
Jul_Alpha = INT( ( ( JulDate - 1867216 ) - 0.25 ) / 36524.25 )
JulA = ( JulDate + 1 + Jul_Alpha - INT( 0.25 * Jul_Alpha ) )
ELSE
JulA = JulDate
END IF
JulB = JulA + 1524
JulC = INT( 6680! + ( ( JulB - 2439870 ) - 122.1 ) / 365.25 )
JulD = INT( 0.25 * JulC ) + ( 365 * JulC )
JulE = INT( ( JulB - JulD ) / 30.6001 )
Day = JulB - JulD - INT( 30.6001 * JulE )
Month = JulE - 1
IF ( Month > 12 ) THEN Month = Month - 12
Year = JulC - 4715
IF ( Month > 2 ) THEN Year = Year - 1
JulianToDate = CLNG( (Year-1900)*10000 + Month*100 + Day )
END FUNCTION
'************************************************************************
' JulianToDate - Converts TradeStation Date (LONG) to Day of Week (LONG)
'************************************************************************
FUNCTION DayOfWeek( BYVAL TDate AS LONG ) AS LONG
LOCAL TSDateJul AS LONG
TSDateJul = DateToJulian(TDate)
DayOfWeek = TSDateJul MOD 7
END FUNCTION
'************************************************************************
' DateToJulian - Converts TSdate (Y)YYMMDD to Calendar Date (LONG)
'************************************************************************
FUNCTION TStoCalDate( BYVAL TSDate AS LONG ) AS LONG
TStoCalDate = 1900 + (TSDate/10000 - INT(TSDate/10000))*100000000 + INT(TSDate/10000)
END FUNCTION
'************************************************************************
FUNCTION PBMAIN
DestFile = "Dates.txt
hFile2 = FREEFILE
OPEN DestFile FOR OUTPUT AS hFile2 ' Create/Overwrite output file
Jstart = DateToJulian(970101)
FOR i = Jstart TO Jstart + 2900
Date = JulianToDate(i)
CalDate = TStoCalDate(Date)
CalDateStr = TRIM$(STR$(CalDate))
IF LEN(CalDateStr) < 8 THEN CalDateStr = "0"+CalDateStr
CalDateStr = LEFT$(CalDateStr,2)+"/"+LEFT$(RIGHT$(CalDateStr,6),2)+"/"+RIGHT$(CalDateStr,4)
Day = DayOfWeek(i)
Jul = DateToJulian(Date)
SELECT CASE Day
CASE 0 : DayStr = "Sunday -----"
CASE 1 : DayStr = "Mon"
CASE 2 : DayStr = "Tues"
CASE 3 : DayStr = "Wed"
CASE 4 : DayStr = "Thur"
CASE 5 : DayStr = "Fri"
CASE 6 : DayStr = "Sat"
END SELECT
JulError = i - Jul
IF JulError > 0 THEN MSGBOX("ERROR !!!!")
PRINT# hFile2, "Julian "+STR$(i)+" Date "+STR$(Date)+" CalDate "+_
CalDateStr+" Day "+DayStr ' Write a line
NEXT
CLOSE #hFile2 ' Close Output file
MSGBOX("Finished")
END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
------------------
Kind Regards
Mike
Comment