Обсуждение: Bug in the setTimestamp() method for Newfoundland time zone

Поиск
Список
Период
Сортировка

Bug in the setTimestamp() method for Newfoundland time zone

От
Brent Eagles
Дата:
Hi,

The Statement.setTimestamp() implementation has a bug in it for half
hour timezones west of GMT.  Newfoundland is such a location with a
timezone offset of GMT -3:30.  An example of a bogus string (calc
includes Daylight savings time offset) follows:

2003-07-15 10:43:35.000000-020-30

The problem is in here:

    int l_minos = l_offset - (l_houros * 60);
    if (l_minos != 0)
    {
    if (l_minos < 10)
        sbuf.append('0');
    sbuf.append(l_minos);
    }

l_minos is going to be negative so 1. a zero is going to erroneously be
inserted into the stream and 2. the neg sign is going to be included in
sbuf.append(l_minos).

A possible fix is to modify the code like so:

    if (l_minos != 0)
    {
        l_minos = Math.abs(l_minos);
    if (l_minos < 10)
        sbuf.append('0');
    sbuf.append(l_minos);
    }


Best regards,

Brent

--
Brent Eagles
Principal Engineer - IONA | Making Software Work Together TM
Email: mailto:brent.eagles@iona.com
Phone: (709) 738-3725 x18
WWW: http://www.iona.com/

Re: Bug in the setTimestamp() method for Newfoundland time

От
Barry Lind
Дата:
Brent,

This is now fixed in current cvs.  Thanks for the bug report.

--Barry

Brent Eagles wrote:
> Hi,
>
> The Statement.setTimestamp() implementation has a bug in it for half
> hour timezones west of GMT.  Newfoundland is such a location with a
> timezone offset of GMT -3:30.  An example of a bogus string (calc
> includes Daylight savings time offset) follows:
>
> 2003-07-15 10:43:35.000000-020-30
>
> The problem is in here:
>
>     int l_minos = l_offset - (l_houros * 60);
>     if (l_minos != 0)
>     {
>     if (l_minos < 10)
>         sbuf.append('0');
>     sbuf.append(l_minos);
>     }
>
> l_minos is going to be negative so 1. a zero is going to erroneously be
> inserted into the stream and 2. the neg sign is going to be included in
> sbuf.append(l_minos).
>
> A possible fix is to modify the code like so:
>
>     if (l_minos != 0)
>     {
>         l_minos = Math.abs(l_minos);
>     if (l_minos < 10)
>         sbuf.append('0');
>     sbuf.append(l_minos);
>     }
>
>
> Best regards,
>
> Brent
>