[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]
{
Does anyone happen to have the Pascal coding for a "calendar date" to "PCBoard
Julian (2-byte WORD)" conversion?
... take notice that this is not the standard 4-byte LONGINT Julian date, but
the 2-byte WORD PCBoard version of it.
I have come up with the following, however its calculations are slightly
incorrect ...
{-------------------------------------------------------------------------}
Function Cal2Word (Source : String) : Word;
{
Title : Cal2Word
Purpose : Convert Calendar MM/DD/YY Date -> PCBoard-Julian/Word
Procs/Funcs : [None]
Precondition : Source = Calendar MM/DD/YY Date
Postcondition : Cal2Word [Function] = PCBoard-Julian/Word
}
Const {.. Declare "Cal2Word" Constants ...................................}
Days : Array[1..12] of Word = (0,31,59,90,120,151,181,212,243,273,304,334);
Var {.. Declare "Cal2Word" Variables .....................................}
Date : Word; { Calculated Julian Date }
Year : Word;
Month : Word;
Day : Word;
tPos : Byte; { String/Position Storage }
Begin
{.. Parse Month/Day/Year from "Source"-String ..........................}
tPos:= Pos('-',Source);
If tPos = 0 Then Month:= 0 Else Begin
Month:= StrInt(Copy(Source,1,tPos - 1));
Delete(Source,1,tPos)
End;
tPos:= Pos('-',Source);
If tPos = 0 Then Day:= 0 Else Begin
Day:= StrInt(Copy(Source,1,tPos - 1));
Delete(Source,1,tPos)
End;
Year:= StrInt(Source);
{.. Actual Julian-Date Calculation .....................................}
Date:= 36525 * Year;
If (((Date Mod 100) = 0) and (Month < 3)) Then Dec(Date);
Date:= (Date - (1900 * 36525)) Div 100;
Inc(Date,Day + Days[Month]);
Cal2Word:= Date
End;
[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]