aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-09-06 11:29:52 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2021-09-06 11:29:52 -0400
commit599c73a91a0471465a84f12fe6a2e7236a825721 (patch)
tree6d6451e007d1a155c9db5d1cc6da86260df70254 /src
parent1e9afc868eb5a3b2f50629c2724d9fcdbe0afee2 (diff)
downloadpostgresql-599c73a91a0471465a84f12fe6a2e7236a825721.tar.gz
postgresql-599c73a91a0471465a84f12fe6a2e7236a825721.zip
Fix bogus timetz_zone() results for DYNTZ abbreviations.
timetz_zone() delivered completely wrong answers if the zone was specified by a dynamic TZ abbreviation, because it failed to account for the difference between the POSIX conventions for field values in struct pg_tm and the conventions used in PG-specific datetime code. As a stopgap fix, just adjust the tm_year and tm_mon fields to match PG conventions. This is fixed in a different way in HEAD (388e71af8) but I don't want to back-patch the change of reference point. Discussion: https://postgr.es/m/CAJ7c6TOMG8zSNEZtCn5SPe+cCk3Lfxb71ZaQwT2F4T7PJ_t=KA@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/date.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 0bea16cb671..8690860cb72 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -3073,6 +3073,8 @@ timetz_zone(PG_FUNCTION_ARGS)
struct pg_tm *tm;
tm = pg_localtime(&now, tzp);
+ tm->tm_year += 1900; /* adjust to PG conventions */
+ tm->tm_mon += 1;
tz = DetermineTimeZoneAbbrevOffset(tm, tzname, tzp);
}
else