postgres.git / summary / log / commit / refs
commit d8a266c5e1bd50785d4619ecb3e686f86771685f
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon Sep 06 15:29:52 2021 +0000
First released in: 9.6.24, 10.19, 11.14, 12.9, 13.5, 14.0
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
src/backend/utils/adt/date.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 4c48ff455ce..e798c1a78ee 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -2832,6 +2832,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
[parent: 9f9ae019d194]