ISO8601 vs POSIX offset clarification

Started by Bharanee Rathnaover 8 years ago6 messagesgeneral
Jump to latest
#1Bharanee Rathna
deepfryed@gmail.com

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bharanee Rathna (#1)
Re: ISO8601 vs POSIX offset clarification

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

#3Bharanee Rathna
deepfryed@gmail.com
In reply to: Tom Lane (#2)
Re: ISO8601 vs POSIX offset clarification

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 <tgl@sss.pgh.pa.us> wrote:

Show quoted text

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

#4Bharanee Rathna
deepfryed@gmail.com
In reply to: Bharanee Rathna (#3)
Re: ISO8601 vs POSIX offset clarification

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 <deepfryed@gmail.com> wrote:

Show quoted text

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 <tgl@sss.pgh.pa.us> wrote:

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

#5rob stone
floriparob@gmail.com
In reply to: Bharanee Rathna (#4)
Re: ISO8601 vs POSIX offset clarification

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.

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bharanee Rathna (#4)
Re: ISO8601 vs POSIX offset clarification

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