From 639c459d6a81b10517c06e1a7dc0936d346f57ed Mon Sep 17 00:00:00 2001 From: Michael Lenaghan Date: Wed, 26 Jul 2023 17:48:56 -0400 Subject: [PATCH] Change the timezones to the match the canonical IANA Zone IDs --- libc/time/localtime.c | 32 ++++++++++-------- libc/time/time.mk | 33 +++++++++++++++---- test/libc/stdio/dirstream_test.c | 6 ++-- test/libc/time/strftime_test.c | 4 +-- third_party/python/Lib/test/test_time.py | 4 +-- tool/net/definitions.lua | 30 ++++++++--------- tool/net/help.txt | 30 ++++++++--------- usr/share/zoneinfo/{ => America}/Anchorage | Bin usr/share/zoneinfo/{ => America}/Chicago | Bin usr/share/zoneinfo/{ => America}/Denver | Bin usr/share/zoneinfo/{ => America}/Los_Angeles | Bin usr/share/zoneinfo/{ => America}/New_York | Bin usr/share/zoneinfo/{ => Asia}/Jerusalem | Bin usr/share/zoneinfo/{ => Asia}/Kolkata | Bin usr/share/zoneinfo/{ => Asia}/Shanghai | Bin usr/share/zoneinfo/{ => Asia}/Tokyo | Bin usr/share/zoneinfo/{ => Australia}/Sydney | Bin usr/share/zoneinfo/{ => Europe}/Berlin | Bin usr/share/zoneinfo/{ => Europe}/London | Bin usr/share/zoneinfo/{ => Pacific}/Honolulu | Bin 20 files changed, 82 insertions(+), 57 deletions(-) rename usr/share/zoneinfo/{ => America}/Anchorage (100%) rename usr/share/zoneinfo/{ => America}/Chicago (100%) rename usr/share/zoneinfo/{ => America}/Denver (100%) rename usr/share/zoneinfo/{ => America}/Los_Angeles (100%) rename usr/share/zoneinfo/{ => America}/New_York (100%) rename usr/share/zoneinfo/{ => Asia}/Jerusalem (100%) rename usr/share/zoneinfo/{ => Asia}/Kolkata (100%) rename usr/share/zoneinfo/{ => Asia}/Shanghai (100%) rename usr/share/zoneinfo/{ => Asia}/Tokyo (100%) rename usr/share/zoneinfo/{ => Australia}/Sydney (100%) rename usr/share/zoneinfo/{ => Europe}/Berlin (100%) rename usr/share/zoneinfo/{ => Europe}/London (100%) rename usr/share/zoneinfo/{ => Pacific}/Honolulu (100%) diff --git a/libc/time/localtime.c b/libc/time/localtime.c index da9492ae2..321438ce4 100644 --- a/libc/time/localtime.c +++ b/libc/time/localtime.c @@ -19,22 +19,26 @@ STATIC_YOINK("zipos"); STATIC_YOINK("usr/share/zoneinfo/"); -STATIC_YOINK("usr/share/zoneinfo/Anchorage"); -STATIC_YOINK("usr/share/zoneinfo/Berlin"); -STATIC_YOINK("usr/share/zoneinfo/Chicago"); -STATIC_YOINK("usr/share/zoneinfo/Denver"); +STATIC_YOINK("usr/share/zoneinfo/America/"); +STATIC_YOINK("usr/share/zoneinfo/America/Anchorage"); +STATIC_YOINK("usr/share/zoneinfo/America/Chicago"); +STATIC_YOINK("usr/share/zoneinfo/America/Denver"); +STATIC_YOINK("usr/share/zoneinfo/America/Los_Angeles"); +STATIC_YOINK("usr/share/zoneinfo/America/New_York"); +STATIC_YOINK("usr/share/zoneinfo/Asia/"); +STATIC_YOINK("usr/share/zoneinfo/Asia/Jerusalem"); +STATIC_YOINK("usr/share/zoneinfo/Asia/Kolkata"); +STATIC_YOINK("usr/share/zoneinfo/Asia/Shanghai"); +STATIC_YOINK("usr/share/zoneinfo/Asia/Tokyo"); +STATIC_YOINK("usr/share/zoneinfo/Australia/"); +STATIC_YOINK("usr/share/zoneinfo/Australia/Sydney"); +STATIC_YOINK("usr/share/zoneinfo/Europe/"); +STATIC_YOINK("usr/share/zoneinfo/Europe/Berlin"); +STATIC_YOINK("usr/share/zoneinfo/Europe/London"); STATIC_YOINK("usr/share/zoneinfo/GMT"); -STATIC_YOINK("usr/share/zoneinfo/Honolulu"); -STATIC_YOINK("usr/share/zoneinfo/Jerusalem"); -STATIC_YOINK("usr/share/zoneinfo/Kolkata"); -STATIC_YOINK("usr/share/zoneinfo/Los_Angeles"); -STATIC_YOINK("usr/share/zoneinfo/London"); -STATIC_YOINK("usr/share/zoneinfo/New_York"); -STATIC_YOINK("usr/share/zoneinfo/Shanghai"); -STATIC_YOINK("usr/share/zoneinfo/Sydney"); -STATIC_YOINK("usr/share/zoneinfo/Tokyo"); +STATIC_YOINK("usr/share/zoneinfo/Pacific/"); +STATIC_YOINK("usr/share/zoneinfo/Pacific/Honolulu"); STATIC_YOINK("usr/share/zoneinfo/UTC"); - // clang-format off /* Convert timestamp from time_t to struct tm. */ /* diff --git a/libc/time/time.mk b/libc/time/time.mk index ee86f5e35..a511d7e8d 100644 --- a/libc/time/time.mk +++ b/libc/time/time.mk @@ -4,7 +4,13 @@ PKGS += LIBC_TIME LIBC_TIME_ARTIFACTS += LIBC_TIME_A -LIBC_TIME_ZONEINFOS = $(wildcard usr/share/zoneinfo/*) +LIBC_TIME_ZONEINFOS = \ + $(wildcard usr/share/zoneinfo/*) \ + $(wildcard usr/share/zoneinfo/America/*) \ + $(wildcard usr/share/zoneinfo/Asia/*) \ + $(wildcard usr/share/zoneinfo/Australia/*) \ + $(wildcard usr/share/zoneinfo/Europe/*) \ + $(wildcard usr/share/zoneinfo/Pacific/*) LIBC_TIME = $(LIBC_TIME_A_DEPS) $(LIBC_TIME_A) LIBC_TIME_A = o/$(MODE)/libc/time/time.a LIBC_TIME_A_FILES := $(wildcard libc/time/struct/*) $(wildcard libc/time/*) @@ -16,11 +22,16 @@ LIBC_TIME_A_SRCS = \ $(LIBC_TIME_A_SRCS_S) \ $(LIBC_TIME_A_SRCS_C) -LIBC_TIME_A_OBJS = \ - o/$(MODE)/usr/share/zoneinfo/.zip.o \ - $(LIBC_TIME_A_SRCS_S:%.S=o/$(MODE)/%.o) \ - $(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \ - $(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \ +LIBC_TIME_A_OBJS = \ + o/$(MODE)/usr/share/zoneinfo/.zip.o \ + o/$(MODE)/usr/share/zoneinfo/America/.zip.o \ + o/$(MODE)/usr/share/zoneinfo/Asia/.zip.o \ + o/$(MODE)/usr/share/zoneinfo/Australia/.zip.o \ + o/$(MODE)/usr/share/zoneinfo/Europe/.zip.o \ + o/$(MODE)/usr/share/zoneinfo/Pacific/.zip.o \ + $(LIBC_TIME_A_SRCS_S:%.S=o/$(MODE)/%.o) \ + $(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \ + $(LIBC_TIME_A_SRCS_C:%.c=o/$(MODE)/%.o) \ $(LIBC_TIME_ZONEINFOS:%=o/$(MODE)/%.zip.o) LIBC_TIME_A_CHECKS = \ @@ -70,6 +81,16 @@ o/$(MODE)/libc/time/iso8601us.o: private \ o/$(MODE)/usr/share/zoneinfo/.zip.o: \ usr/share/zoneinfo +o/$(MODE)/usr/share/zoneinfo/America/.zip.o: \ + usr/share/zoneinfo/America +o/$(MODE)/usr/share/zoneinfo/Asia/.zip.o: \ + usr/share/zoneinfo/Asia +o/$(MODE)/usr/share/zoneinfo/Australia/.zip.o: \ + usr/share/zoneinfo/Australia +o/$(MODE)/usr/share/zoneinfo/Europe/.zip.o: \ + usr/share/zoneinfo/Europe +o/$(MODE)/usr/share/zoneinfo/Pacific/.zip.o: \ + usr/share/zoneinfo/Pacific o/$(MODE)/libc/time/kmonthname.o: libc/time/kmonthname.S @$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) -c $< diff --git a/test/libc/stdio/dirstream_test.c b/test/libc/stdio/dirstream_test.c index cb0b345cc..f7f1abf8a 100644 --- a/test/libc/stdio/dirstream_test.c +++ b/test/libc/stdio/dirstream_test.c @@ -30,7 +30,7 @@ #include "libc/x/xiso8601.h" STATIC_YOINK("zipos"); -STATIC_YOINK("usr/share/zoneinfo/New_York"); +STATIC_YOINK("usr/share/zoneinfo/America/New_York"); char testlib_enable_tmp_setup_teardown; @@ -142,7 +142,7 @@ TEST(dirstream, test) { TEST(dirstream, zipTest) { bool foundNewYork = false; - const char *path = "/zip/usr/share/zoneinfo/"; + const char *path = "/zip/usr/share/zoneinfo/America/"; ASSERT_NE(0, _gc(xiso8601ts(NULL))); ASSERT_NE(NULL, (dir = opendir(path))); while ((ent = readdir(dir))) { @@ -180,6 +180,6 @@ TEST(rewinddir, test) { } TEST(dirstream, zipTest_notDir) { - ASSERT_EQ(NULL, opendir("/zip/usr/share/zoneinfo/New_York")); + ASSERT_EQ(NULL, opendir("/zip/usr/share/zoneinfo/America/New_York")); ASSERT_EQ(ENOTDIR, errno); } diff --git a/test/libc/time/strftime_test.c b/test/libc/time/strftime_test.c index 4891a9ede..79537e802 100644 --- a/test/libc/time/strftime_test.c +++ b/test/libc/time/strftime_test.c @@ -24,7 +24,7 @@ #include "libc/time/time.h" textstartup static void strftime_test_init(void) { - setenv("TZ", "Los_Angeles", true); + setenv("TZ", "America/Los_Angeles", true); } const void *const strftime_test_ctor[] initarray = {strftime_test_init}; @@ -60,7 +60,7 @@ TEST(strftime_100, rfc822_ShakaZuluTime) { TEST(strftime_201, iso8601_LosAngeles) { int64_t t = 0x5cd04d0e; - ASSERT_STREQ("Los_Angeles", getenv("TZ")); + ASSERT_STREQ("America/Los_Angeles", getenv("TZ")); ASSERT_STREQ("2019-05-06T08:04:46PDT", FormatTime("%Y-%m-%dT%H:%M:%S%Z", localtime(&t))); } diff --git a/third_party/python/Lib/test/test_time.py b/third_party/python/Lib/test/test_time.py index b9b5e08a5..5a406aab0 100644 --- a/third_party/python/Lib/test/test_time.py +++ b/third_party/python/Lib/test/test_time.py @@ -300,8 +300,8 @@ class TimeTestCase(unittest.TestCase): # utc='UTC+0' utc = 'UTC' - new_york = 'New_York' - sydney = 'Sydney' + new_york = 'America/New_York' + sydney = 'Australia/Sydney' org_TZ = environ.get('TZ',None) try: diff --git a/tool/net/definitions.lua b/tool/net/definitions.lua index 17d5119ce..b62f3f806 100644 --- a/tool/net/definitions.lua +++ b/tool/net/definitions.lua @@ -7071,21 +7071,21 @@ function unix.gmtime(unixts) end --- --- Your redbean ships with a subset of the time zone database. --- ---- - `/zip/usr/share/zoneinfo/Honolulu` Z-10 ---- - `/zip/usr/share/zoneinfo/Anchorage` Z-09/-08 ---- - `/zip/usr/share/zoneinfo/Los_Angeles` Z-08/-07 ---- - `/zip/usr/share/zoneinfo/Denver` Z-07/-06 ---- - `/zip/usr/share/zoneinfo/Chicago` Z-06/-05 ---- - `/zip/usr/share/zoneinfo/New_York` Z-05/-04 ---- - `/zip/usr/share/zoneinfo/UTC` Z+00 ---- - `/zip/usr/share/zoneinfo/GMT` Z+00 ---- - `/zip/usr/share/zoneinfo/London` Z+00/+01 ---- - `/zip/usr/share/zoneinfo/Berlin` Z+01/+02 ---- - `/zip/usr/share/zoneinfo/Jerusalem` Z+02/+03 ---- - `/zip/usr/share/zoneinfo/Kolkata` Z+05:30 ---- - `/zip/usr/share/zoneinfo/Shanghai` Z+08 ---- - `/zip/usr/share/zoneinfo/Tokyo` Z+09 ---- - `/zip/usr/share/zoneinfo/Sydney` Z+10/+11 +--- - `/zip/usr/share/zoneinfo/Pacific/Honolulu` Z-10 +--- - `/zip/usr/share/zoneinfo/America/Anchorage` Z-09/-08 +--- - `/zip/usr/share/zoneinfo/America/Los_Angeles` Z-08/-07 +--- - `/zip/usr/share/zoneinfo/America/Denver` Z-07/-06 +--- - `/zip/usr/share/zoneinfo/America/Chicago` Z-06/-05 +--- - `/zip/usr/share/zoneinfo/America/New_York` Z-05/-04 +--- - `/zip/usr/share/zoneinfo/UTC` Z+00 +--- - `/zip/usr/share/zoneinfo/GMT` Z+00 +--- - `/zip/usr/share/zoneinfo/Europe/London` Z+00/+01 +--- - `/zip/usr/share/zoneinfo/Europe/Berlin` Z+01/+02 +--- - `/zip/usr/share/zoneinfo/Asia/Jerusalem` Z+02/+03 +--- - `/zip/usr/share/zoneinfo/Asia/Kolkata` Z+05:30 +--- - `/zip/usr/share/zoneinfo/Asia/Shanghai` Z+08 +--- - `/zip/usr/share/zoneinfo/Asia/Tokyo` Z+09 +--- - `/zip/usr/share/zoneinfo/Australia/Sydney` Z+10/+11 --- --- You can control which timezone is used using the `TZ` environment --- variable. If your time zone isn't included in the above list, you diff --git a/tool/net/help.txt b/tool/net/help.txt index 9ffdc83bb..92b5e77c6 100644 --- a/tool/net/help.txt +++ b/tool/net/help.txt @@ -4586,21 +4586,21 @@ UNIX MODULE Your redbean ships with a subset of the time zone database. - - `/zip/usr/share/zoneinfo/Honolulu` Z-10 - - `/zip/usr/share/zoneinfo/Anchorage` Z-09/-08 - - `/zip/usr/share/zoneinfo/Los_Angeles` Z-08/-07 - - `/zip/usr/share/zoneinfo/Denver` Z-07/-06 - - `/zip/usr/share/zoneinfo/Chicago` Z-06/-05 - - `/zip/usr/share/zoneinfo/New_York` Z-05/-04 - - `/zip/usr/share/zoneinfo/UTC` Z+00 - - `/zip/usr/share/zoneinfo/GMT` Z+00 - - `/zip/usr/share/zoneinfo/London` Z+00/+01 - - `/zip/usr/share/zoneinfo/Berlin` Z+01/+02 - - `/zip/usr/share/zoneinfo/Jerusalem` Z+02/+03 - - `/zip/usr/share/zoneinfo/Kolkata` Z+05:30 - - `/zip/usr/share/zoneinfo/Shanghai` Z+08 - - `/zip/usr/share/zoneinfo/Tokyo` Z+09 - - `/zip/usr/share/zoneinfo/Sydney` Z+10/+11 + - `/zip/usr/share/zoneinfo/Pacific/Honolulu` Z-10 + - `/zip/usr/share/zoneinfo/America/Anchorage` Z-09/-08 + - `/zip/usr/share/zoneinfo/America/Los_Angeles` Z-08/-07 + - `/zip/usr/share/zoneinfo/America/Denver` Z-07/-06 + - `/zip/usr/share/zoneinfo/America/Chicago` Z-06/-05 + - `/zip/usr/share/zoneinfo/America/New_York` Z-05/-04 + - `/zip/usr/share/zoneinfo/UTC` Z+00 + - `/zip/usr/share/zoneinfo/GMT` Z+00 + - `/zip/usr/share/zoneinfo/Europe/London` Z+00/+01 + - `/zip/usr/share/zoneinfo/Europe/Berlin` Z+01/+02 + - `/zip/usr/share/zoneinfo/Asia/Jerusalem` Z+02/+03 + - `/zip/usr/share/zoneinfo/Asia/Kolkata` Z+05:30 + - `/zip/usr/share/zoneinfo/Asia/Shanghai` Z+08 + - `/zip/usr/share/zoneinfo/Asia/Tokyo` Z+09 + - `/zip/usr/share/zoneinfo/Australia/Sydney` Z+10/+11 You can control which timezone is used using the `TZ` environment variable. If your time zone isn't included in the above list, you diff --git a/usr/share/zoneinfo/Anchorage b/usr/share/zoneinfo/America/Anchorage similarity index 100% rename from usr/share/zoneinfo/Anchorage rename to usr/share/zoneinfo/America/Anchorage diff --git a/usr/share/zoneinfo/Chicago b/usr/share/zoneinfo/America/Chicago similarity index 100% rename from usr/share/zoneinfo/Chicago rename to usr/share/zoneinfo/America/Chicago diff --git a/usr/share/zoneinfo/Denver b/usr/share/zoneinfo/America/Denver similarity index 100% rename from usr/share/zoneinfo/Denver rename to usr/share/zoneinfo/America/Denver diff --git a/usr/share/zoneinfo/Los_Angeles b/usr/share/zoneinfo/America/Los_Angeles similarity index 100% rename from usr/share/zoneinfo/Los_Angeles rename to usr/share/zoneinfo/America/Los_Angeles diff --git a/usr/share/zoneinfo/New_York b/usr/share/zoneinfo/America/New_York similarity index 100% rename from usr/share/zoneinfo/New_York rename to usr/share/zoneinfo/America/New_York diff --git a/usr/share/zoneinfo/Jerusalem b/usr/share/zoneinfo/Asia/Jerusalem similarity index 100% rename from usr/share/zoneinfo/Jerusalem rename to usr/share/zoneinfo/Asia/Jerusalem diff --git a/usr/share/zoneinfo/Kolkata b/usr/share/zoneinfo/Asia/Kolkata similarity index 100% rename from usr/share/zoneinfo/Kolkata rename to usr/share/zoneinfo/Asia/Kolkata diff --git a/usr/share/zoneinfo/Shanghai b/usr/share/zoneinfo/Asia/Shanghai similarity index 100% rename from usr/share/zoneinfo/Shanghai rename to usr/share/zoneinfo/Asia/Shanghai diff --git a/usr/share/zoneinfo/Tokyo b/usr/share/zoneinfo/Asia/Tokyo similarity index 100% rename from usr/share/zoneinfo/Tokyo rename to usr/share/zoneinfo/Asia/Tokyo diff --git a/usr/share/zoneinfo/Sydney b/usr/share/zoneinfo/Australia/Sydney similarity index 100% rename from usr/share/zoneinfo/Sydney rename to usr/share/zoneinfo/Australia/Sydney diff --git a/usr/share/zoneinfo/Berlin b/usr/share/zoneinfo/Europe/Berlin similarity index 100% rename from usr/share/zoneinfo/Berlin rename to usr/share/zoneinfo/Europe/Berlin diff --git a/usr/share/zoneinfo/London b/usr/share/zoneinfo/Europe/London similarity index 100% rename from usr/share/zoneinfo/London rename to usr/share/zoneinfo/Europe/London diff --git a/usr/share/zoneinfo/Honolulu b/usr/share/zoneinfo/Pacific/Honolulu similarity index 100% rename from usr/share/zoneinfo/Honolulu rename to usr/share/zoneinfo/Pacific/Honolulu