You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have searched the issues of this repo and believe that this is not a duplicate.
I have searched the documentation and believe that my question is not covered.
Issue
I see in pendulum.tz.local_timezone that Pendulum tries to get the local timezone from some distro-specific files such as /etc/timezone and /etc/sysconfig/clock. It only falls back to /etc/localtime if these files don't exist. But libc only uses /etc/localtime to get the system default local timezone. (glibc source is hard to follow, but this is pretty clear in do_tzset() in musl libc.)
This can lead to weird behavior where most apps (e.g., the date command) think the system uses one timezone, but Pendulum thinks it uses a different one. For example, one way that people sometimes override the timezone in Docker containers is to bind mount /etc/localtime from the host system into the container. Which can result in a mismatch between /etc/localtime and /etc/timezone but works fine for almost everything because libc only uses /etc/localtime.
+1 on this issue. I think usage of /etc/timezone should be removed entirely, although I don't have enough knowledge of the history of Linux or potential compatibility issues to be confident enough to remove it. I'm on Ubuntu, and if you use the timedatectl utility to change the local timezone, it updates /etc/localtimebut not/etc/timezone. This created a lot of confusion until I dove into the Pendulum source code and found that it prioritizes the /etc/timezone file over /etc/localtime. Updating /etc/timezone manually works, but seems like a poor solution.
Issue
I see in
pendulum.tz.local_timezone
that Pendulum tries to get the local timezone from some distro-specific files such as/etc/timezone
and/etc/sysconfig/clock
. It only falls back to/etc/localtime
if these files don't exist. But libc only uses/etc/localtime
to get the system default local timezone. (glibc source is hard to follow, but this is pretty clear indo_tzset()
in musl libc.)This can lead to weird behavior where most apps (e.g., the
date
command) think the system uses one timezone, but Pendulum thinks it uses a different one. For example, one way that people sometimes override the timezone in Docker containers is to bind mount/etc/localtime
from the host system into the container. Which can result in a mismatch between/etc/localtime
and/etc/timezone
but works fine for almost everything because libc only uses/etc/localtime
.See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=822733 where Debian is working on getting rid of
/etc/timezone
.It seems like it would be best to remove handling of the distro-specific configs, and only use
os.environ['TZ']
and/etc/localtime
on Linux.The text was updated successfully, but these errors were encountered: