AsReal8

 (Available in 01 TS COM - TS_COM_DateTimeFromVariant)

Purpose

Get the date+time as a float

Syntax

? oDateTimeFromVariant:AsReal8

Description

Get a REAL8-date/time from a system date/time structure

MSDN ==== SystemTimeToVariantTime

Converts the variant representation of time-to-system-time values.

INT SystemTimeToVariantTime( LPSYSTEMTIME lpSystemTime double *pvtime );

Parameters

lpSystemTime

The system time.

pvtime

Returned variant time.

Return Value

The function returns one of the following:

Value Meaning zero Failure. non-zero Success.

Comments

A variant time is stored as an 8-byte real value (double), representing a date between January 1, 100 and December 31, 9999, inclusive. The value 2.0 represents January 1, 1900; 3.0 represents January 2, 1900, and so on. Adding 1 to the value increments the date by a day. The fractional part of the value represents the time of day. Therefore, 2.5 represents noon on January 1, 1900; 3.25 represents 6:00 A.M. on January 2, 1900, and so on. Negative numbers represent the dates prior to December 30, 1899.

The LPSYSTEMTIME structure is useful for the following reasons:

It spans all time/date periods. MS-DOS date/time is limited to representing only those dates between 1/1/1980 and 12/31/2107. The date/time elements are all easily accessible without needing to do any bit decoding. The National Data Support data and time formatting functions GetDateFormat and GetTimeFormat take a LPSYSTEMTIME value as input. For more information, see the COM Programmer's Reference in the Platform SDK. It is the default Win32 time/date data format supported by Windows NT and Windows 95. The SystemTimeToVariantTime function will accept invalid dates and try to fix them when resolving to a VARIANT time. For example, an invalid date such as 2/29/2001 will resolve to 3/1/2001. Only days are fixed, so invalid month values result in an error being returned. Days are checked to be between 1 and 31. Negative days and days greater than 31 results in an error. A day less than 31 but greater than the maximum day in that month has the day promoted to the appropriate day of the next month. A day equal to zero resolves as the last day of the previous month. For example, an invalid dates such as 2/0/2001 will resolve to 1/31/2001.

Source

ACCESS AsReal8 AS REAL8 PASCAL CLASS TS_DateTimeFromVariant
LOCAL fAsReal8 AS REAL8
   TSTrace Enter
   IF SELF:IsValidObject
      IF !LOGIC( _CAST, TS_SystemTimeToVariantTime( SELF:_SystemTime ; ...
     ... , @fAsReal8 ) )
         TSTrace Warning "!LOGIC(_CAST,TS_SystemTimeToVariantTime(SELF:_SystemTime" ; ...
        ... +",@fAsReal8))"
         fAsReal8:=0.0
      END
   ELSE
      TSTrace Warning "!SELF:IsValidObject"
      fAsReal8:=0.0
   END
   TSTrace Leave
RETURN fAsReal8