Обсуждение: Bug in the setTimestamp() method for Newfoundland time zone
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/
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 >