| **Navigation:** [[introduction.htm|Language Reference]] > 3 - Variable Declarations > Data Types >====== DATE (four-byte date) ====== | [[implicit string arrays and string slicing.htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[time four byte time .htm|{{btn_next_n.gif|Next page}}]] |
| ||
| label | **DATE** | [,**DIM( )**] [,**OVER( )**] [,**NAME( )**] [,**EXTERNAL**] [,**DLLL**] [,**STATIC**] [,**THREAD**] [,**AUTO**] [,**PRIVATE**] [,**PROTECTED**] |
| | | |
{{blk2blue.jpg|blk2blue.jpg}}
| **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:**
[[standard date.htm|Standard Date]]
[[time four byte time .htm|TIME]]