Обсуждение: ISO8601 vs POSIX offset clarification

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

ISO8601 vs POSIX offset clarification

От
Bharanee Rathna
Дата:
Hi, the documentation around how numeric offsets are parsed from strings is a bit confusing, are they supposed to be treated as ISO8601 or POSIX ? e.g. select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time zone '+11:00'; timezone --------------------- 2017-11-30 13:00:00 select '2017-12-01 11:00:00 -11:00'::timestamp with time zone at time zone '+11:00'; timezone --------------------- 2017-12-01 11:00:00 The Table 8-12. Time Zone Input section at https://www.postgresql.org/docs/9.3/static/datatype-datetime.html seems to imply that numeric offsets would be treated as ISO8601. It's all a big confusing and would appreciate some clarification or pointer to documentation. Thanks

Re: ISO8601 vs POSIX offset clarification

От
Tom Lane
Дата:
Bharanee Rathna <deepfryed@gmail.com> writes:
> the documentation around how numeric offsets are parsed from strings is a
> bit confusing, are they supposed to be treated as ISO8601 or POSIX ?

Our documentation about this says clearly that Postgres considers offsets
to be ISO (positive-east-of-Greenwich) everywhere except in POSIX-style
time zone names.

> The Table 8-12. Time Zone Input section at
> https://www.postgresql.org/docs/9.3/static/datatype-datetime.html seems to
> imply that numeric offsets would be treated as ISO8601.

How do you read an entry such as

    -8:00    |    ISO-8601 offset for PST

as being in any way vague about which convention the "-8" is read in?

            regards, tom lane


Re: ISO8601 vs POSIX offset clarification

От
Bharanee Rathna
Дата:
Sorry I didn't mean for it to come out as a complaint, just that I am confused since the result of the SQL query was not what I expected. I expected +11:00 to be 11 hours east of UTC which wasn't the case. On 4 December 2017 at 13:55, Tom Lane wrote: > Bharanee Rathna writes: > > the documentation around how numeric offsets are parsed from strings is a > > bit confusing, are they supposed to be treated as ISO8601 or POSIX ? > > Our documentation about this says clearly that Postgres considers offsets > to be ISO (positive-east-of-Greenwich) everywhere except in POSIX-style > time zone names. > > > The Table 8-12. Time Zone Input section at > > https://www.postgresql.org/docs/9.3/static/datatype-datetime.html seems > to > > imply that numeric offsets would be treated as ISO8601. > > How do you read an entry such as > > -8:00 | ISO-8601 offset for PST > > as being in any way vague about which convention the "-8" is read in? > > regards, tom lane >

Re: ISO8601 vs POSIX offset clarification

От
Bharanee Rathna
Дата:
To be more specific, I expected the output of both these queries to be the same. # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time zone '+11:00'; timezone --------------------- 2017-11-30 13:00:00 # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time zone 'Australia/Melbourne'; timezone --------------------- 2017-12-01 11:00:00 Cheers On 4 December 2017 at 13:59, Bharanee Rathna wrote: > Sorry I didn't mean for it to come out as a complaint, just that I am > confused since the result of the SQL query was not what I expected. I > expected +11:00 to be 11 hours east of UTC which wasn't the case. > > > > On 4 December 2017 at 13:55, Tom Lane wrote: > >> Bharanee Rathna writes: >> > the documentation around how numeric offsets are parsed from strings is >> a >> > bit confusing, are they supposed to be treated as ISO8601 or POSIX ? >> >> Our documentation about this says clearly that Postgres considers offsets >> to be ISO (positive-east-of-Greenwich) everywhere except in POSIX-style >> time zone names. >> >> > The Table 8-12. Time Zone Input section at >> > https://www.postgresql.org/docs/9.3/static/datatype-datetime.html >> seems to >> > imply that numeric offsets would be treated as ISO8601. >> >> How do you read an entry such as >> >> -8:00 | ISO-8601 offset for PST >> >> as being in any way vague about which convention the "-8" is read in? >> >> regards, tom lane >> > >

Re: ISO8601 vs POSIX offset clarification

От
rob stone
Дата:

On Mon, 2017-12-04 at 14:03 +1100, Bharanee Rathna wrote:
> To be more specific, I expected the output of both these queries to
> be the same.
> 
> # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at
> time zone '+11:00';
>       timezone       
> ---------------------
>  2017-11-30 13:00:00
> 
> # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at
> time zone 'Australia/Melbourne';
>       timezone       
> ---------------------
>  2017-12-01 11:00:00
> 
> Cheers
> 


select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time
zone INTERVAL '+11:00';

Result:-

2017-12-01 11:00:00.0


You need the INTERVAL keyword when using a numeric value instead of a
time zone name. It's in the doco.

The parser ought to throw an error, but it doesn't.
 




Re: ISO8601 vs POSIX offset clarification

От
Tom Lane
Дата:
Bharanee Rathna <deepfryed@gmail.com> writes:
> To be more specific, I expected the output of both these queries to be the
> same.
> # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time
> zone '+11:00';
> # select '2017-12-01 11:00:00 +11:00'::timestamp with time zone at time
> zone 'Australia/Melbourne';

The +11 in your timestamp input value is per ISO convention, but the
argument of AT TIME ZONE is a zone name, so it follows the POSIX
convention if it's numeric.

            regards, tom lane