@@ -603,14 +603,21 @@ class datetime
603603 }
604604 }
605605
606- datetime () : m_interval(0 ) {}
606+ datetime () : m_interval(0 ) { }
607607
608608 // / <summary>
609- // / Creates <c>datetime</c> from a string representing time in UTC in RFC 1123 format.
609+ // / Creates <c>datetime</c> from a string representing time in UTC in RFC 1123 or ISO 8601 format.
610610 // / </summary>
611611 // / <returns>Returns a <c>datetime</c> of zero if not successful.</returns>
612612 static _ASYNCRTIMP datetime __cdecl from_string (const utility::string_t & timestring, date_format format = RFC_1123);
613613
614+ // / <summary>
615+ // / Creates <c>datetime</c> from a string representing time in UTC in RFC 1123 or ISO 8601 format.
616+ // / </summary>
617+ // / <returns>Returns <c>datetime::maximum()</c> if not successful.</returns>
618+ static _ASYNCRTIMP datetime __cdecl from_string_maximum_error (const utility::string_t & timestring,
619+ date_format format = RFC_1123);
620+
614621 // / <summary>
615622 // / Returns a string representation of the <c>datetime</c>.
616623 // / </summary>
@@ -621,20 +628,22 @@ class datetime
621628 // / </summary>
622629 interval_type to_interval () const { return m_interval; }
623630
631+ static datetime from_interval (interval_type interval) { return datetime (interval); }
632+
624633 datetime operator -(interval_type value) const { return datetime (m_interval - value); }
625634
626635 datetime operator +(interval_type value) const { return datetime (m_interval + value); }
627636
628637 bool operator ==(datetime dt) const { return m_interval == dt.m_interval ; }
629638
630639 bool operator !=(const datetime& dt) const { return !(*this == dt); }
631-
640+
632641 bool operator >(const datetime& dt) const { return this ->m_interval > dt.m_interval ; }
633-
642+
634643 bool operator <(const datetime& dt) const { return this ->m_interval < dt.m_interval ; }
635-
644+
636645 bool operator >=(const datetime& dt) const { return this ->m_interval >= dt.m_interval ; }
637-
646+
638647 bool operator <=(const datetime& dt) const { return this ->m_interval <= dt.m_interval ; }
639648
640649 static interval_type from_milliseconds (unsigned int milliseconds) { return milliseconds * _msTicks; }
@@ -649,6 +658,8 @@ class datetime
649658
650659 bool is_initialized () const { return m_interval != 0 ; }
651660
661+ static datetime maximum () { return datetime (static_cast <interval_type>(-1 )); }
662+
652663private:
653664 friend int operator -(datetime t1, datetime t2);
654665
@@ -659,7 +670,7 @@ class datetime
659670 static const interval_type _dayTicks = 24 * 60 * 60 * _secondTicks;
660671
661672 // Private constructor. Use static methods to create an instance.
662- datetime (interval_type interval) : m_interval(interval) {}
673+ datetime (interval_type interval) : m_interval(interval) { }
663674
664675 // Storing as hundreds of nanoseconds 10e-7, i.e. 1 here equals 100ns.
665676 interval_type m_interval;
0 commit comments