The IS8601_CONVERT call routine might compute an incorrect value


The IS8601_CONVERT call routine converts an ISO 8601 interval to datetime and duration values, or converts datetime and duration values to an ISO 8601 interval. The IS8601_CONVERT call routine might generate an incorrect value. One example of a call that produces an incorrect result is shown below:

call is8601_convert('intvl','start','PT5H/2015-12-25T10:00:00',start);

The four arguments to the call routine above indicate the following:

  1. an interval is provided
  2. the start value is requested
  3. the interval of 5 hours and the ending datetime value are provided
  4. the variable Start is requested

The result should be 25DEC2015:05:00, since the ending time should be 5 hours after the starting time. The incorrect time of 24DEC2015:19:00 is computed because the ending hour offset of 10:00:00 is subtracted, as well as the duration offset of 05:00:00 when computing the start time. Only the duration time should be subtracted.

There is currently no circumvention for this problem.