diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-09-06 11:29:52 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-09-06 11:29:52 -0400 |
commit | 90b4647f63dae68181557d244717a7615831243d (patch) | |
tree | d0d5a3532fc61c092f9be941b91664607cc8fae1 /src | |
parent | 8782a84529035baca1639c3680458e2062ef9b44 (diff) | |
download | postgresql-90b4647f63dae68181557d244717a7615831243d.tar.gz postgresql-90b4647f63dae68181557d244717a7615831243d.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.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index fa3c2801f33..986fadcdb11 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -2848,6 +2848,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 |