anchor.diff:      case re:run(TimeZoneString, "^([Z+-])([0-9]{2})?(:?)([0-9]{2})?$", [{capture, all_but_first, list}]) of
           {match, ["Z", "", ""]} ->
               {true, {DateTuple, TimeTuple}};
  -        {match, [T | Other]} when ((T == "+") or (T == "-")) ->
  -            add_time({DateTuple, TimeTuple}, T, Other);
  +        {match, [T, Time | Other]} when ((T == "+") or (T == "-")) ->
  +            add_time({DateTuple, TimeTuple}, T, s2i(Time), Other);
           _ ->
               false
       end.
  
positive.code: s2i("") -> 0;
  s2i(Str) -> list_to_integer(Str).
  
  add_time(DateTime, T, [H | Tail]) ->
      Seconds1 = calendar:datetime_to_gregorian_seconds(DateTime),
      Seconds2 = add(T, Seconds1, s2i(H) * 3600),
      Seconds3 =  case Tail of
                      [""] ->
                          Seconds2;
                      [_Cut, Minutes] ->
                          add(T, Seconds2, s2i(Minutes) * 60)
                  end,
      {true, calendar:gregorian_seconds_to_datetime(Seconds3)}.
  
  add("+", A, B) -> A - B;
  add("-", A, B) -> A + B.
  
negative.code:         _ -> false
      end.
  
  validate_datetime({Year, Month, Day} = DateTuple, {Hour, Minute, Second} = TimeTuple, TimeZoneString) ->
      case {calendar:valid_date(Year, Month, Day), valid_time(Hour, Minute, Second)} of
          {true, true} ->
  