DateTimeSpan DateTimeSpan::operator-(const DateTimeSpan& dateSpan)
      const
   {
      DateTimeSpan dateSpanTemp;

      // If either operand Null, result Null
      if (GetStatus() == null || dateSpan.GetStatus() == null)
      {
         dateSpanTemp.SetStatus(null);
         return dateSpanTemp;
      }

      // If either operand Invalid, result Invalid
      if (GetStatus() == invalid || dateSpan.GetStatus() == invalid)
      {
         dateSpanTemp.SetStatus(invalid);
         return dateSpanTemp;
      }

      // Subtract spans and validate within legal range
      dateSpanTemp.span_ = span_ - dateSpan.span_;
      dateSpanTemp.CheckRange();

      return dateSpanTemp;
   }
   DateTimeSpan DateTimeSpan::operator+(const DateTimeSpan& dateSpan)
      const
   {
      DateTimeSpan dateSpanTemp;

      // If either operand Null, result Null
      if (GetStatus() == null || dateSpan.GetStatus() == null)
      {

         dateSpanTemp.SetStatus(null);
         return dateSpanTemp;
      }

      // If either operand Invalid, result Invalid
      if (GetStatus() == invalid || dateSpan.GetStatus() == invalid)
      {
         dateSpanTemp.SetStatus(invalid);
         return dateSpanTemp;
      }

      // Add spans and validate within legal range
      dateSpanTemp.m_span = m_span + dateSpan.m_span;
      dateSpanTemp.CheckRange();

      return dateSpanTemp;
   }
   DateTimeSpan DateTime::operator-(const DateTime& date) const
   {
      DateTimeSpan spanResult;

      // If either operand NULL, result NULL
      if (GetStatus() == null || date.GetStatus() == null)
      {
         spanResult.SetStatus(DateTimeSpan::null);
         return spanResult;
      }

      // If either operand invalid, result invalid
      if (GetStatus() == invalid || date.GetStatus() == invalid)
      {
         spanResult.SetStatus(DateTimeSpan::invalid);
         return spanResult;
      }

      // Return result (span can't be invalid, so don't check range)
      return DoubleFromDate(dt_) - DoubleFromDate(date.dt_);
   }