From: Tom Lane Date: Mon, 6 Sep 2021 15:29:52 +0000 (-0400) Subject: Fix bogus timetz_zone() results for DYNTZ abbreviations. X-Git-Tag: REL_14_RC1~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=599c73a91a0471465a84f12fe6a2e7236a825721;p=thirdparty%2Fpostgresql.git 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 --- 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