The date(1) command is supposed to take its timezone from the TZ environment variable.
Here's an example from the manpage:
68 mak:> date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Fri Oct 20 09:00:00 GMT 2023
Taking a variation:
69 mak:> TZ='America/Los_Angeles' date
Mon Oct 16 16:03:03 GMT 2023
Except as you can see, in both cases, date(1) reported out using 'GMT'. In my case, I ran these commands at 11:03am in America/Chicago.
What I expected was times expressed via the TZ:
108 mak:> date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Fri Oct 20 11:00:00 CDT 2023
And:
109 mak:> TZ='America/Los_Angeles' date
Mon Oct 16 09:46:44 PDT 2023`
So even though the TZ was set, date(1) ran home to GMT, because on gitbash the default directory for the zoneinfo data was empty.
to solve this, I grabbed the data from a zoneinfo repo on github and copied the zoneinfo directory to /use/share/zoneinfo
to double check, I verified that the magic number for these (binary) files was as I expected:
and date(1) immediately found the data and employed it to get the correct results.
another double check on the --date switch behavior: