Формат даты и времени эпохи Postgres UTC, инверсия знака - PullRequest
5 голосов
/ 06 декабря 2011

Может ли кто-нибудь объяснить мне эту инверсию знака, я здесь потерян ...

SELECT EXTRACT(EPOCH FROM '01-01-1970 00:00:00 UTC+01'::timestamp with time zone)

=> 3600

SELECT EXTRACT(EPOCH FROM '1970-01-01 00:00:00+01'::timestamp with time zone)

=> -3600

Postgres 8.3.14

1 Ответ

5 голосов
/ 06 декабря 2011

Это

1970-01-01 00:00:00+01

является отметкой времени ISO 8601 со смещением +1 часа и +1 означает восток от Гринвича.Смещения в этих

01-01-1970 00:00:00 UTC+01
1970-01-01 00:00:00 UTC+01
1970-01-01 00:00:00 XXX+01
1970-01-01 00:00:00 HAHA+01
1970-01-01 00:00:00 Pancakes+01

будут интерпретироваться как часовые пояса в стиле POSIX , где +1 означает запад Гринвича:

PostgreSQLбудет принимать спецификации часовых поясов в стиле POSIX в форме STDoffset или STDoffsetDST, где STD - это аббревиатура зоны, offset - это числовое смещение в часах к западу от UTC

, и даже с предупреждением:

Следует опасаться, что функция часового пояса в стиле POSIX может привести к молчаливому принятию фиктивного ввода, поскольку нет проверки на правильность сокращений зон.Например, SET TIMEZONE TO FOOBAR0 будет работать, в результате чего система будет эффективно использовать довольно своеобразное сокращение для UTC.Другая проблема, о которой следует помнить, заключается в том, что в именах часовых поясов POSIX положительные смещения используются для местоположений к западу от Гринвича.В любом другом месте PostgreSQL следует соглашению ISO-8601, согласно которому положительные смещения часовых поясов находятся к востоку от Гринвича.

Обратите внимание на разницу между западом и востоком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...