mirror of
https://github.com/postgres/postgres.git
synced 2025-11-13 16:22:44 +03:00
Make EXTRACT(TIMEZONE) and SET/SHOW TIMEZONE follow the SQL convention
for the sign of timezone offsets, ie, positive is east from UTC. These were previously out of step with other operations that accept or show timezones, such as I/O of timestamptz values.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.81 2003/07/15 19:34:43 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.82 2003/07/17 00:55:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -429,7 +429,8 @@ assign_timezone(const char *value, bool doit, bool interactive)
|
||||
}
|
||||
if (doit)
|
||||
{
|
||||
CTimeZone = interval->time;
|
||||
/* Here we change from SQL to Unix sign convention */
|
||||
CTimeZone = - interval->time;
|
||||
HasCTZSet = true;
|
||||
}
|
||||
pfree(interval);
|
||||
@@ -444,7 +445,8 @@ assign_timezone(const char *value, bool doit, bool interactive)
|
||||
{
|
||||
if (doit)
|
||||
{
|
||||
CTimeZone = hours * 3600;
|
||||
/* Here we change from SQL to Unix sign convention */
|
||||
CTimeZone = - hours * 3600;
|
||||
HasCTZSet = true;
|
||||
}
|
||||
}
|
||||
@@ -557,7 +559,8 @@ assign_timezone(const char *value, bool doit, bool interactive)
|
||||
return NULL;
|
||||
|
||||
if (HasCTZSet)
|
||||
snprintf(result, sizeof(tzbuf), "%.5f", (double) CTimeZone / 3600.0);
|
||||
snprintf(result, sizeof(tzbuf), "%.5f",
|
||||
(double) (-CTimeZone) / 3600.0);
|
||||
else if (tzbuf[0] == 'T')
|
||||
strcpy(result, tzbuf + 3);
|
||||
else
|
||||
@@ -579,7 +582,7 @@ show_timezone(void)
|
||||
Interval interval;
|
||||
|
||||
interval.month = 0;
|
||||
interval.time = CTimeZone;
|
||||
interval.time = - CTimeZone;
|
||||
|
||||
tzn = DatumGetCString(DirectFunctionCall1(interval_out,
|
||||
IntervalPGetDatum(&interval)));
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.83 2003/06/16 18:56:45 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.84 2003/07/17 00:55:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -2031,17 +2031,18 @@ timetz_part(PG_FUNCTION_ARGS)
|
||||
switch (val)
|
||||
{
|
||||
case DTK_TZ:
|
||||
result = tz;
|
||||
result = -tz;
|
||||
break;
|
||||
|
||||
case DTK_TZ_MINUTE:
|
||||
result = tz / 60;
|
||||
TMODULO(result, dummy, 60e0);
|
||||
result = -tz;
|
||||
result /= 60;
|
||||
FMODULO(result, dummy, 60e0);
|
||||
break;
|
||||
|
||||
case DTK_TZ_HOUR:
|
||||
dummy = tz;
|
||||
TMODULO(dummy, result, 3600e0);
|
||||
dummy = -tz;
|
||||
FMODULO(dummy, result, 3600e0);
|
||||
break;
|
||||
|
||||
case DTK_MICROSEC:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.108 2003/05/12 23:08:50 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.109 2003/07/17 00:55:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -825,12 +825,14 @@ reltimesend(PG_FUNCTION_ARGS)
|
||||
static void
|
||||
reltime2tm(RelativeTime time, struct tm * tm)
|
||||
{
|
||||
TMODULO(time, tm->tm_year, 31557600);
|
||||
TMODULO(time, tm->tm_mon, 2592000);
|
||||
TMODULO(time, tm->tm_mday, 86400);
|
||||
TMODULO(time, tm->tm_hour, 3600);
|
||||
TMODULO(time, tm->tm_min, 60);
|
||||
TMODULO(time, tm->tm_sec, 1);
|
||||
double dtime = time;
|
||||
|
||||
FMODULO(dtime, tm->tm_year, 31557600);
|
||||
FMODULO(dtime, tm->tm_mon, 2592000);
|
||||
FMODULO(dtime, tm->tm_mday, 86400);
|
||||
FMODULO(dtime, tm->tm_hour, 3600);
|
||||
FMODULO(dtime, tm->tm_min, 60);
|
||||
FMODULO(dtime, tm->tm_sec, 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.85 2003/07/04 18:21:13 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.86 2003/07/17 00:55:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -3080,17 +3080,18 @@ timestamptz_part(PG_FUNCTION_ARGS)
|
||||
switch (val)
|
||||
{
|
||||
case DTK_TZ:
|
||||
result = tz;
|
||||
result = -tz;
|
||||
break;
|
||||
|
||||
case DTK_TZ_MINUTE:
|
||||
result = tz / 60;
|
||||
TMODULO(result, dummy, 60e0);
|
||||
result = -tz;
|
||||
result /= 60;
|
||||
FMODULO(result, dummy, 60e0);
|
||||
break;
|
||||
|
||||
case DTK_TZ_HOUR:
|
||||
dummy = tz;
|
||||
TMODULO(dummy, result, 3600e0);
|
||||
dummy = -tz;
|
||||
FMODULO(dummy, result, 3600e0);
|
||||
break;
|
||||
|
||||
case DTK_MICROSEC:
|
||||
|
||||
Reference in New Issue
Block a user