[Rd] Sys.timezone() fails on Linux under Microsoft WSL

Jim Hester j@me@@|@he@ter @end|ng |rom gm@||@com
Mon Apr 26 15:33:19 CEST 2021

One way to avoid the call to timedatectl is to set the `TZ` environment
variable on your machine to your local timezone, if this is set
`Sys.timezone()` uses this and does not try to query timedatectl for the

This is a common issue as well in docker containers, as like on WSL in
docker timedatectl is present, but non-functional.


On Tue, Apr 13, 2021 at 9:19 AM Brenton Wiernik <brenton using wiernik.org> wrote:

> In Microsoft’s Windows Subsystem for Linux (WSL or WSL2), there is not
> system framework, so utilities that depend on it fail. This includes
> timedatectl which R uses in Sys.timezone(). The timedatectl utility is
> present on Linux systems installed under WSL/WSL2, but is non-functional.
> So, when Sys.timezone() checks for Sys.which("timedatectl"), it receives a
> false positive. The subsequent methods after this if () do work, however.
> This can be fixed if line 42 of Sys.timezone() were changed from:
> if (nzchar(Sys.which("timedatectl"))) {
> to:
> if (nzchar(Sys.which("timedatectl")) && !grepl("microsoft", system("uname
> -r", intern = TRUE), ignore.case = TRUE)) {
> "uname -r" returns for example:
> "5.4.72-microsoft-standard-WSL2"
> So checking for "microsoft" or "WSL" would probably work.
> Brenton Wiernik
>         [[alternative HTML version deleted]]
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

	[[alternative HTML version deleted]]

More information about the R-devel mailing list