anchor.diff:    result.Fraction := fraction;
   end;
   
  +function TDateTimeEx.after(other : TDateTimeEx; inclusive : boolean) : boolean;
  +var
  +  uSelf, uOther : TDateTimeEx;
  +begin
  +  uSelf := UTC;
  +  uOther := other.UTC;
  +  if uSelf.equal(uOther) then
  +    exit(inclusive);
  +  result := (uSelf.year >= uOther.year) and (uSelf.month >= uOther.month) and (uSelf.day >= uOther.day) and
  +            (uSelf.hour >= uOther.hour) and (uSelf.minute >= uOther.minute) and (uSelf.second >= uOther.second) and (uSelf.fraction >= uOther.fraction);
  +end;
  +
  +function TDateTimeEx.before(other : TDateTimeEx; inclusive : boolean):boolean;
  +var
  +  uSelf, uOther : TDateTimeEx;
  +begin
  +  uSelf := UTC;
  +  uOther := other.UTC;
  +  if uSelf.equal(uOther) then
  +    exit(inclusive);
  +  result := (uSelf.year <= uOther.year) and (uSelf.month <= uOther.month) and (uSelf.day <= uOther.day) and
  +            (uSelf.hour <= uOther.hour) and (uSelf.minute <= uOther.minute) and (uSelf.second <= uOther.second) and (uSelf.fraction <= uOther.fraction);
  +end;
  +
  +function TDateTimeEx.between(min, max : TDateTimeEx; inclusive : boolean):boolean;
  +begin
  +  result := after(min, inclusive) and before(max, inclusive);
  +end;
  +
   const
     DATETIME_FORMAT_XML = 'yyyy-mm-dd"T"hh:nn:ss';
   
  
positive.code:     function toString: String;  overload; // as human readable
      function toHL7: String; // as hhhhmmhhnnss.zzz+T
      function toXML : String;
  
      property Precision : TDateTimeExPrecision read FPrecision;
    end;
  
negative.code:     function IncrementDay: TDateTimeEx;
      function add(length : TDateTime) : TDateTimeEx;
      function subtract(length : TDateTime) : TDateTimeEx;
      function lessPrecision: TDateTimeEx;
  
      function equal(other : TDateTimeEx) : Boolean;  // returns true if the timezone, FPrecision, and actual instant are the same
      function sameTime(other : TDateTimeEx) : Boolean; // returns true if the specified instant is the same allowing for specified FPrecision - corrects for timezone
      function after(other : TDateTimeEx; inclusive : boolean):boolean;
      function before(other : TDateTimeEx; inclusive : boolean):boolean;
      function between(min, max : TDateTimeEx; inclusive : boolean):boolean;
  
      {@
      Valid formatting strings are
  