Re: getTiIme/Timestamp with TimeZone inconsistency

Поиск
Список
Период
Сортировка
От Oliver Jowett
Тема Re: getTiIme/Timestamp with TimeZone inconsistency
Дата
Msg-id 49FCD8DB.7000707@opencloud.com
обсуждение исходный текст
Ответ на getTiIme/Timestamp with TimeZone inconsistency  (John Lister <john.lister-ps@kickstone.com>)
Ответы Re: getTiIme/Timestamp with TimeZone inconsistency
Список pgsql-jdbc
John Lister wrote:

> However in TimestampUtils.getTime, this is initially done, but then
> reversed further down and the supplied timezone is used as follows:
>
>        if (ts.hasDate) {
>            // Rotate it into the requested timezone before we zero out
> the date
>            .....
>            cal.setTime(new Date(useCal.getTime().getTime()));
>            useCal = cal;
>        }
>
> is there a reason for this as it seems inconsistent with getTimestamp
> and the api docs?

I believe this is necessary so that the Time type's invariants (that
day/month/year is Jan 1 1970 in the specified timezone) are satisfied.
The driver extends the interpretation of getTime(int,Calender) to mean
that the returned Time object will be valid for the specified Calendar,
regardless of whether a timezone was present in the underlying DB or not.

The underlying timezone, if present, is still used when constructing a
milliseconds value, but the driver then rotates that resulting value
into the target timezone. If we don't do that then you get the strange
result that retrieving a time "01:35:42" while providing a Calendar will
result in a Time object that does not display as 01:35:42 if you format
it with that same Calendar. (I hesitate to say whether this is right or
wrong, because as usual JDBC is woefully underspecified in this area,
but it's certainly confusing at a minimum)

-O

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: John Lister
Дата:
Сообщение: getTiIme/Timestamp with TimeZone inconsistency
Следующее
От: Péter Kovács
Дата:
Сообщение: Re: Very strange performance decrease when reusing a PreparedStatement