[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]