Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text bottom

GRE2JUL$  PowerBASIC  Function

         

GRE2JUL$ function evaluates to the date in Julian format (YY-DDD or CCYY-DDD) that corresponds to the Gregorian date specified as its parameter.  Date should be specified in one of the formats MM-DD-YY or MM-DD-CCYY and should be a valid date in Gregorian calendar.  If parameter doesn't represent a valid date, "" (empty string) is returned instead of Julian date value.  Date field delimiters are expected to be in the fixed positions 3 and 5; values of delimiters are insignificant.  If parameter is empty, Julian date value is returned for the current date.

Julian date no doubt belongs completely to the mainframe past, and hardly is any longer used as a separate date format even in modern mainframes.  However, its usage simplifies significantly all date calculations into which it inevitably gets incorporated.  I prefer to use Julian format explicitly in order to make date conversion logic clear.

Direct dependencies:

LEAP% Check year for leap value (predicate)
VALDGRE% Check date for valid Gregorian value (predicate)

Indirect dependency:

DIGITAL% Check character string for digital value (predicate)



 GRE2JUL$  Source  Program                       Debugging program             Debugging logout

      ' GRE2JUL$(0.0)  Convert Gregorian Date to Julian      04/05/1988-09/30/2004
      ' --------------------------------------------------------------------------
      ' Copyright (C) 1988-2004 by Vladimir Veytsel                  www.davar.net

      ' Type ---------------------------------------------------------------------

      '    Function

      ' Description --------------------------------------------------------------

      '    GRE2JUL$ function converts Gregorian date into Julian date format.

      ' Declaration --------------------------------------------------------------

      '    DECLARE FUNCTION GRE2JUL$(Greg.Date$)

      ' Parameter ----------------------------------------------------------------

      '    Greg.Date$  - Gregorian date in the form of MM-DD-YY or MM-DD-CCYY

      ' Value --------------------------------------------------------------------

      '    If specified Gregorian date is either EMPTY or valid, i.e.:
      '       it has length either of 8 or 10 characters and
      '       it is DIGITAL (with the exception of date field delimiters) and
      '       month value lies within 1-12 and
      '       day number lies within range valid for the specified month
      '       (considering specified year leap characteristic when
      '       evaluating day range for February),
      '       then YY-DDD or CCYY-DDD (date in Julian format) is returned
      '            to the point of function invocation
      '            (where DDD is a day number within a year),
      '       else "" (empty string) is returned to the point of invocation.

      ' Notes --------------------------------------------------------------------

      '  - Delimiters of parameter date fields are irrelevant and can be any
      '    symbols.  Date fields are extracted from fixed positions.

      '  - EMPTY date is considered to be a valid one, and date in Julian
      '    format CCYY-DDD is returned for the CURRENT date (default).

      ' Examples -----------------------------------------------------------------

      '    GRE2JUL$(""          )=Current date in Julian format
      '    GRE2JUL$("02-29-1987")=""
      '    GRE2JUL$("01-01-87"  )="87-001"
      '    GRE2JUL$("01-31-87"  )="87-031"
      '    GRE2JUL$("02-28-87"  )="87-059"
      '    GRE2JUL$("03-31-87"  )="87-090"
      '    GRE2JUL$("04-30-87"  )="87-120"
      '    GRE2JUL$("05-31-87"  )="87-151"
      '    GRE2JUL$("06-30-87"  )="87-181"
      '    GRE2JUL$("07-31-87"  )="87-212"
      '    GRE2JUL$("08-31-87"  )="87-243"
      '    GRE2JUL$("09-30-87"  )="87-273"
      '    GRE2JUL$("10-31-87"  )="87-304"
      '    GRE2JUL$("11-30-87"  )="87-334"
      '    GRE2JUL$("12-31-87"  )="87-365"

      '    GRE2JUL$("01-01-1988")="1988-001"
      '    GRE2JUL$("01-31-1988")="1988-031"
      '    GRE2JUL$("02-29-1988")="1988-060"
      '    GRE2JUL$("03-31-1988")="1988-091"
      '    GRE2JUL$("04-30-1988")="1988-121"
      '    GRE2JUL$("05-31-1988")="1988-152"
      '    GRE2JUL$("06-30-1988")="1988-182"
      '    GRE2JUL$("07-31-1988")="1988-213"
      '    GRE2JUL$("08-31-1988")="1988-244"
      '    GRE2JUL$("09-30-1988")="1988-274"
      '    GRE2JUL$("10-31-1988")="1988-305"
      '    GRE2JUL$("11-30-1988")="1988-335"
      '    GRE2JUL$("12-31-1988")="1988-366"

      ' External Functions -------------------------------------------------------

           DECLARE FUNCTION LEAP%   (Year$)
           DECLARE FUNCTION VALDGRE%(Spec.Date$)

      ' Start Function -----------------------------------------------------------

           DEFINT A-Z  ' All defaulted variables are integer

           FUNCTION GRE2JUL$(Greg.Date$) PUBLIC

      ' Check Date Validity and Handle Default Empty Date (Current) --------------

           IF (LEN(Greg.Date$)=0) THEN
              DT$=DATE$
           ELSEIF (VALDGRE%(Greg.Date$)) THEN
              DT$=Greg.Date$
           ELSE
              GRE2JUL$=""
              EXIT FUNCTION
           END IF

      ' Parse Date to Be Converted -----------------------------------------------

           Month=VAL(LEFT$(DT$,2))
           Day  =VAL( MID$(DT$,4,2))
           Year$=     MID$(DT$,7)

      ' Compute Julian Day Number ------------------------------------------------

           DDD=Day+ _
               VAL(MID$("000,031,059,090,120,151,181,212,243,273,304,334",4*Month-3,3))+ _
               (Month>2)*(LEAP%(Year$))

      ' Form and Return Julian Date Value to the Point of Invocation -------------

           GRE2JUL$=Year$+"-"+RIGHT$("00"+LTRIM$(STR$(DDD)),3)

      ' Finish.Function ----------------------------------------------------------

           END FUNCTION
  
         

 GRE2JUL$  Debugging  Program                     Source program             Debugging logout

      ' GRE2JUL$(0.0)  Convert Gregorian Date to Julian      04/05/1988-09/30/2004
      ' --------------------------------------------------------------------------

        $INCLUDE "GRE2JUL"
        $LINK    "MODULE.PBL"

        DECLARE FUNCTION GRE2JUL$(Greg.Date$)

        CLS
        PRINT "GRE2JUL$(0.0)  Convert Gregorian Date to Julian Format  ";DATE$;
        PRINT "  ";LEFT$(TIME$,5)
        PRINT STRING$(73,"-")
        PRINT

        PRINT "GRE2JUL$(''          )='"; _
               GRE2JUL$(""          );"'  - Today ";DATE$
        PRINT "GRE2JUL$('02-29-1987')='"; _
               GRE2JUL$("02-29-1987");"'"
        PRINT "GRE2JUL$('01-01-87'  )='"; _
               GRE2JUL$("01-01-87"  );"'"
        PRINT "GRE2JUL$('01-31-87'  )='"; _
               GRE2JUL$("01-31-87"  );"'"
        PRINT "GRE2JUL$('02-28-87'  )='"; _
               GRE2JUL$("02-28-87"  );"'"
        PRINT "GRE2JUL$('03-31-87'  )='"; _
               GRE2JUL$("03-31-87"  );"'"
        PRINT "GRE2JUL$('04-30-87'  )='"; _
               GRE2JUL$("04-30-87"  );"'"
        PRINT "GRE2JUL$('05-31-87'  )='"; _
               GRE2JUL$("05-31-87"  );"'"
        PRINT "GRE2JUL$('06-30-87'  )='"; _
               GRE2JUL$("06-30-87"  );"'"
        PRINT "GRE2JUL$('07-31-87'  )='"; _
               GRE2JUL$("07-31-87"  );"'"
        PRINT "GRE2JUL$('08-31-87'  )='"; _
               GRE2JUL$("08-31-87"  );"'"
        PRINT "GRE2JUL$('09-30-87'  )='"; _
               GRE2JUL$("09-30-87"  );"'"
        PRINT "GRE2JUL$('10-31-87'  )='"; _
               GRE2JUL$("10-31-87"  );"'"
        PRINT "GRE2JUL$('11-30-87'  )='"; _
               GRE2JUL$("11-30-87"  );"'"
        PRINT "GRE2JUL$('12-31-87'  )='"; _
               GRE2JUL$("12-31-87"  );"'"

        PRINT
        INPUT "Hit [Enter] to continue execution...",Var$
        PRINT

        PRINT "GRE2JUL$('01-01-1988')='"; _
               GRE2JUL$("01-01-1988");"'"
        PRINT "GRE2JUL$('01-31-1988')='"; _
               GRE2JUL$("01-31-1988");"'"
        PRINT "GRE2JUL$('02-29-1988')='"; _
               GRE2JUL$("02-29-1988");"'"
        PRINT "GRE2JUL$('03-31-1988')='"; _
               GRE2JUL$("03-31-1988");"'"
        PRINT "GRE2JUL$('04-30-1988')='"; _
               GRE2JUL$("04-30-1988");"'"
        PRINT "GRE2JUL$('05-31-1988')='"; _
               GRE2JUL$("05-31-1988");"'"
        PRINT "GRE2JUL$('06-30-1988')='"; _
               GRE2JUL$("06-30-1988");"'"
        PRINT "GRE2JUL$('07-31-1988')='"; _
               GRE2JUL$("07-31-1988");"'"
        PRINT "GRE2JUL$('08-31-1988')='"; _
               GRE2JUL$("08-31-1988");"'"
        PRINT "GRE2JUL$('09-30-1988')='"; _
               GRE2JUL$("09-30-1988");"'"
        PRINT "GRE2JUL$('10-31-1988')='"; _
               GRE2JUL$("10-31-1988");"'"
        PRINT "GRE2JUL$('11-30-1988')='"; _
               GRE2JUL$("11-30-1988");"'"
        PRINT "GRE2JUL$('12-31-1988')='"; _
               GRE2JUL$("12-31-1988");"'"

        PRINT
        PRINT "Execution completed - hit [Enter] to continue..."
  
         

 GRE2JUL$  Debugging  Logout                         Source program               Debugging program

         

   GRE2JUL$(0.0)  Convert Gregorian Date to Julian Format  10-07-2004  08:05
   -------------------------------------------------------------------------

   GRE2JUL$(''          )='2004-281'  - Today 10-07-2004
   GRE2JUL$('02-29-1987')=''
   GRE2JUL$('01-01-87'  )='87-001'
   GRE2JUL$('01-31-87'  )='87-031'
   GRE2JUL$('02-28-87'  )='87-059'
   GRE2JUL$('03-31-87'  )='87-090'
   GRE2JUL$('04-30-87'  )='87-120'
   GRE2JUL$('05-31-87'  )='87-151'
   GRE2JUL$('06-30-87'  )='87-181'
   GRE2JUL$('07-31-87'  )='87-212'
   GRE2JUL$('08-31-87'  )='87-243'
   GRE2JUL$('09-30-87'  )='87-273'
   GRE2JUL$('10-31-87'  )='87-304'
   GRE2JUL$('11-30-87'  )='87-334'
   GRE2JUL$('12-31-87'  )='87-365'

   Hit [Enter] to continue execution...

   GRE2JUL$('01-01-1988')='1988-001'
   GRE2JUL$('01-31-1988')='1988-031'
   GRE2JUL$('02-29-1988')='1988-060'
   GRE2JUL$('03-31-1988')='1988-091'
   GRE2JUL$('04-30-1988')='1988-121'
   GRE2JUL$('05-31-1988')='1988-152'
   GRE2JUL$('06-30-1988')='1988-182'
   GRE2JUL$('07-31-1988')='1988-213'
   GRE2JUL$('08-31-1988')='1988-244'
   GRE2JUL$('09-30-1988')='1988-274'
   GRE2JUL$('10-31-1988')='1988-305'
   GRE2JUL$('11-30-1988')='1988-335'
   GRE2JUL$('12-31-1988')='1988-366'

   Execution completed - hit [Enter] to continue...
        
      

         

View [and save] GRE2JUL.BAS text       View [and save] ZGRE2JUL.BAS text
(Use [Back] button or [Alt]+[CL] to return here from the viewed text)
Copyright © 1988–2004 by
Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text top