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