From 2ce20bdde18b062b19261a850e7342bb28087eec Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Sun, 24 Jan 2021 15:20:19 -0500 Subject: Support changing TZ env var in Zone functions Signed-off-by: Dave Henderson --- time/time.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'time/time.go') diff --git a/time/time.go b/time/time.go index 58b18eca..9fb0841f 100644 --- a/time/time.go +++ b/time/time.go @@ -3,16 +3,31 @@ package time import ( "time" + + "github.com/hairyhenderson/gomplate/v3/env" ) // ZoneName - a convenience function for determining the current timezone's name func ZoneName() string { - n, _ := time.Now().Zone() + n, _ := zone() return n } // ZoneOffset - determine the current timezone's offset, in seconds east of UTC func ZoneOffset() int { - _, o := time.Now().Zone() + _, o := zone() return o } + +func zone() (string, int) { + // re-read TZ env var in case it's changed since the process started. + // This may happen in certain rare instances when this is being called as a + // library, or in a test. It allows for a bit more flexibility too, as + // changing time.Local is prone to data races. + tz := env.Getenv("TZ", "Local") + loc, err := time.LoadLocation(tz) + if err != nil { + loc = time.Local + } + return time.Now().In(loc).Zone() +} -- cgit v1.2.3