DATE (four-byte date)

Top  Previous  Next









A four-byte date.


Format:    year      mm     dd

      | ........ | .... | .... |

Bits: 31         15      7      0


year:  1 to 9999

month: 1 to 12

day:   1 to 31



Dimension the variable as an array.


Share a memory location with another variable.


Specify an alternate, "external" name for the field.


Specify the variable is defined, and its memory is allocated, in an external library. Not valid within FILE, QUEUE, or GROUP declarations.


Specify the variable is defined in a .DLL. This is required in addition to the EXTERNAL attribute.


Specify the variable's memory is permanently allocated.


Specify memory for the variable is allocated once for each execution thread. Also implicitly adds the STATIC attribute on Procedure Local data.


Specify the variable has no initial value.


Specify the variable is not visible outside the module containing the CLASS methods. Valid only in a CLASS.


Specify the variable is not visible outside base CLASS and derived CLASS methods. Valid only in a CLASS.


DATE declares a four-byte date variable. This format matches the "DATE" field type used by the Btrieve Record Manager. A DATE used in a numeric expression is converted to the number of days elapsed since December 28, 1800 (Clarion Standard Date - usually stored as a LONG). The valid Clarion Standard Date range is January 1, 1801 through December 31, 9999. Using an out-of-range date produces unpredictable results. DATE fields should be used to achieve compatibility with outside files or procedures.



DueDate     DATE                      !Declare a date field

OtherDate   DATE,OVER(DueDate)        !Declare field over date field

ContactDate DATE,DIM(4)               !Array of 4 date fields

ExampleFile FILE,DRIVER('Btrieve')    !Declare a file

Record       RECORD

DateRecd      DATE,NAME('DateField')  !Declare with external name




While a DATE data type has a unique long integer internal D-M-Y format any code using it will automatically convert it to or from a Clarion Standard Date. The only way to obtain the DATE in internal format must be done with a LONG or STRING over the DATE. In the below example code the number 5 is the standard date for Jan, 2 1801.



BT_Raw   LONG,OVER(BT_Date)  !Obtain DATE in internal format

 BT_Date = 5

 Message(Format(BT_Date,@d8-) &' - '& BT_Date &' - '& BT_Raw )

 !displays: 2-Jan-1801 - 5 - 118030594

 !118030594 => 07090102h  0709h => 1801


Additional Example:


!Extracts date parts w/o multiple calls to MONTH,DAY,YEAR or using FORMAT() and slicing.

GetMDY  PROCEDURE(LONG ClaDate, *LONG OutMonth, *LONG OutDay, *LONG OutYear)


BT      GROUP,OVER(BTDate)  !Note Little Endian reversal

Day      BYTE

Month    BYTE

Year     USHORT



 BTDate = ClaDate ! Convert LONG (Clarion Standard Date) to a Btrieve date DDMMYYYY

 OutMonth = BT.Month

 OutDay   = BT.Day

 OutYear  = BT.Year



See Also:

Standard Date