DateTime Class
A class to a represent a date/time as defined by the XML w3c

Base Classes:
Implemented interfaces:

Date and Time manipulation class provided as part of the Liquid XML Data Binding Runtime.

Supports the W3C XML Schema specification subset of the ISO 8601 standard.
The date uses the proleptic Gregorian calendar, this means that dates previous to the invent
of the Gregorian calendar are still held as Gregorian dates.

The Minimum Date represents -9999-12-31T23:59:59.999999999
The Maximum Date represents 9999-12-31T23:59:59.999999999

NOTE: DateTime uses the XML Schema formula for proleptic Gregorian calendar where year 0 is illegal and -4 (4BC) as a leap year.

The Type of value held in the DateTime will differ depending on the way the DateTime is constructed. The Type
value is immutable and is taken from the XML Schema subset of the ISO 8601 standard as follows:

dateTime (DTType_dateTime) comprises [-]CCYY-MM-DDThh:mm:ss[.ff][[Z]|[[+|-]hh:mm]]
date (DTType_date) comprises [-]CCYY-MM-DD[[Z]|[[+|-]hh:mm]]
gDay (DTType_gDay) comprises ---DD[[Z]|[[+|-]hh:mm]]
gMonth (DTType_gMonth) comprises --MM[[Z]|[[+|-]hh:mm]]
gYear (DTType_gYear) comprises [-]CCYY[[Z]|[[+|-]hh:mm]]
gMonthDay (DTType_gMonthDay) comprises --MM-DD[[Z]|[[+|-]hh:mm]]
gYearMonth (DTType_gYearMonth) comprises [-]CCYY-MM[[Z]|[[+|-]hh:mm]]
time (DTType_time) comprises hh:mm:ss[.ff][[Z]|[[+|-]hh:mm]]

The parts in [...] are optional, everything else is mandatory where:

'+', '-', ':', '.', 'T' and 'Z' = literal values
CCYY = Year (-9999 <= CCYY <= 9999 && CCYY != 0000)
MM = Month (01 <= MM <= 12)
DD = Day (01 <= DD <= DaysInMonth)
hh = Hour (00 <= hh <= 23)
mm = Minute (00 <= mm <= 59)
ss = Second (00 <= ss <= 59)
ff = Fraction of Second (0 <= ff <= 999999999)

  Members Description  
    AddDateTimeSpan Adds an DataTimeSpan to this DateTime  
    Clear Empties the DateTime object - reseting it to year 0  
    Clone returns a copy of the object  
    CompareTo Compares this date with another DateTime  
    dateType Gets the type of date represented in the object (gYear, datetime, time etc)  
    Day Gets/Sets the Day part of the time  
    DayOfWeek Gets the Day of the Week  
    DayOfYear Gets the Day of the Year  
    Equals Compares this date with another DateTime  
    HasTimeZone Returns true if the TimeZone part of the DateTime is been used.  
    Hour Get/Sets the Hour part of the time  
    Init Initialises the DateTime object, defining what type of information it holds (gYear, datetime, time etc)  
    IsDayValid Indicates if the Day is valid (given the type of the DateTime)  
    IsHourValid Indicates if the Hour is valid (given the type of the DateTime)  
    IsMilliSecondValid Indicates if the MilliSecond is valid (given the type of the DateTime)  
    IsMinuteValid Indicates if the Minute is valid (given the type of the DateTime)  
    IsMonthValid Indicates if the Month is valid (given the type of the DateTime)  
    IsNanoSecondValid Indicates if the Nano Second is valid (given the type of the DateTime)  
    IsSecondValid Indicates if the Second is valid (given the type of the DateTime)  
    IsUTC Returns true if the UTC part of the DateTime is been used.  
    IsYearValid Indicates if the Year is valid (given the type of the DateTime)  
    MicroSecond Get/Sets the Micro-Second (10^-6) part of the time  
    MilliSecond Get/Sets the Milli-Second (10^-3) part of the time  
    Minute Get/Sets the Minute part of the time  
    Month Get/Sets the Month part of the date. Jan = 1  
    NanoSecond Get/Sets the Nano-Second (10^-9) part of the time  
    ParseXSDDate Populates this DateTime with the value specified as a valid XML Schema date, gDay, gMonth, gYear, gMonthDay or gYearMonth.  
    ParseXSDDateTime Populates this DateTime with the value specified as a valid XML Schema dateTime.  
    ParseXSDTime Populates this DateTime with the value specified as a valid XML Schema time.  
    RealSecond Get/Sets the Second part of the time as a real number including Fraction parts.  
    Second Get/Sets the Second part of the time  
    SetDate Populates this DateTime as type date.  
    SetDateTime Populates this DateTime as type dateTime.  
    SetDateTimeEx Populates this DateTime as type dateTime.  
    SetDateTimeWithType Populates this DateTime as a given type (gYear, datetime, time etc).  
    SetFracTime Populates this DateTime as type time.  
    SetFromDateTime Populates this DateTime class from a VB Date.  
    SetGDay Populates this DateTime as type gDay.  
    SetGMonthDay Populates this DateTime as type gMonthDay  
    SetGYearMonth Populates this DateTime as type gYearMonth.  
    SetGYear Populates this DateTime as type gYear.  
    SetTime Populates this DateTime as type time.  
    SetTimeEx Populates this DateTime as type time.  
    SetTimeZone Specifies the TimeZone for this DateTime to use.  
    SetUTC Specifies this DateTime is UTC.  
    SubDateTimeSpan Subracts a date time span from this DateTime.  
    ToString Returns a string representation of this DateTime.  
    Validate Validates that the DateTime is in a valid state  
    VBDate Gets the current dateTime as a VB Date  
    Year The Year part of the DateTime  
    ZoneHour Gets the Hour part of the time zone.  
    ZoneMinute Gets the Minute part of the time