具有非常旧日期的当地时间
localtime with very old dates
一直在折腾time.h
,遇到了下面的怪事。
time_t t;
struct tm loc, utc;
t = -11676066452; /* This time is mostly arbitrary. */
loc = *localtime(&t);
utc = *gmtime(&t);
printf("localtime: %s", asctime(&loc));
printf("gmtime: %s", asctime(&utc));
输出为
localtime: Sat Jan 1 00:00:00 1600
gmtime: Sat Jan 1 08:12:28 1600
因此,显然,当时本地与 UTC 的绝对偏移量为 8 小时 12 分 28 秒。所选日期甚至早于时区建立,那么 localtime
如何确定此偏移量?
我的时区是 America/Vancouver(太平洋夏令时,或当前为 -7 小时的 UTC 偏移)并且我使用的是 glibc 2.27。
您只是在观察 LMT 的偏移量 (Local Mean Time) entry for America/Vancouver
from the IANA TZ Database.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Vancouver -8:12:28 - LMT 1884
-8:00 Vanc P%sT 1987
-8:00 Canada P%sT
此处来源:https://github.com/eggert/tz/blob/2020a/northamerica#L2134
您可以在 tz 数据库的 theory
文件中阅读有关 LMT(以及更多)的更多信息。
一直在折腾time.h
,遇到了下面的怪事。
time_t t;
struct tm loc, utc;
t = -11676066452; /* This time is mostly arbitrary. */
loc = *localtime(&t);
utc = *gmtime(&t);
printf("localtime: %s", asctime(&loc));
printf("gmtime: %s", asctime(&utc));
输出为
localtime: Sat Jan 1 00:00:00 1600
gmtime: Sat Jan 1 08:12:28 1600
因此,显然,当时本地与 UTC 的绝对偏移量为 8 小时 12 分 28 秒。所选日期甚至早于时区建立,那么 localtime
如何确定此偏移量?
我的时区是 America/Vancouver(太平洋夏令时,或当前为 -7 小时的 UTC 偏移)并且我使用的是 glibc 2.27。
您只是在观察 LMT 的偏移量 (Local Mean Time) entry for America/Vancouver
from the IANA TZ Database.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Vancouver -8:12:28 - LMT 1884
-8:00 Vanc P%sT 1987
-8:00 Canada P%sT
此处来源:https://github.com/eggert/tz/blob/2020a/northamerica#L2134
您可以在 tz 数据库的 theory
文件中阅读有关 LMT(以及更多)的更多信息。