Navigation: Language Reference > 3 - Variable Declarations > Data Types >====== DATE (four-byte date) ====== | |
label | DATE | [,DIM( )] [,OVER( )] [,NAME( )] [,EXTERNAL] [,DLLL] [,STATIC] [,THREAD] [,AUTO] [,PRIVATE] [,PROTECTED] |
DATE | A four-byte date. |
Format: year mm dd
| …….. | …. | …. |
Bits: 31 15 7 0
Range:
year: 1 to 9999
month: 1 to 12
day: 1 to 31
DIM | Dimension the variable as an array. |
OVER | Share a memory location with another variable. |
NAME | Specify an alternate, “external” name for the field. |
EXTERNAL | Specify the variable is defined, and its memory is allocated, in an external library. Not valid within FILE, QUEUE, or GROUP declarations. |
DLL | Specify the variable is defined in a .DLL. This is required in addition to the EXTERNAL attribute. |
STATIC | Specify the variable's memory is permanently allocated. |
THREAD | Specify memory for the variable is allocated once for each execution thread. Also implicitly adds the STATIC attribute on Procedure Local data. |
AUTO | Specify the variable has no initial value. |
PRIVATE | Specify the variable is not visible outside the module containing the CLASS methods. Valid only in a CLASS. |
PROTECTED | 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.
Example:
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 END END
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_Date DATE 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) BTDate DATE,AUTO BT GROUP,OVER(BTDate) !Note Little Endian reversal Day BYTE Month BYTE Year USHORT END CODE BTDate = ClaDate ! Convert LONG (Clarion Standard Date) to a Btrieve date DDMMYYYY OutMonth = BT.Month OutDay = BT.Day OutYear = BT.Year RETURN
See Also: