Ошибка Lubridate: ‘/etc/localtime’ не является символической ссылкой

#r

#r

Вопрос:

Когда я запускаю now() в lubridate, я получаю эту ошибку.

Предупреждение: ваша система неправильно настроена: ‘/etc/localtime’ не является символьной ссылкой Предупреждение: настоятельно рекомендуется установить для переменной среды TZ значение ‘Etc / Universal’ (или эквивалент)

Затем я получаю текущее время, настроенное на UTC.

[1] "2019-04-14 15:50:18 UTC"

Я искал это на SO и github, и я не нахожу много контента. Я запускаю сервер RStudio в Linux-блоке на EC2.

Вот начало вывода из sessionInfo()

 R version 3.5.3 (2019-03-11)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Amazon Linux AMI 2018.03
 

Я искал параметры часового /usr/share/zoneinfo/ пояса и увидел Pacific , что совпадает с моим часовым поясом. Я запустил Sys.setenv(TZ='Pacific') , но он по-прежнему работает не в то время.

 [1] "2019-04-14 16:15:04 Pacific"
Warning message:
In with_tz(Sys.time(), tzone) : Unrecognized time zone ''
 

Комментарии:

1. Пожалуйста, прочтите хотя бы help("Sys.timezone") в base R, чтобы увидеть некоторую соответствующую минимальную информацию о часовых поясах — и обратите внимание на детали разделов и предупреждения . Это довольно загруженная тема. Один из способов установить информацию о часовом поясе, если необходимо, — либо через ваш личный ~/.Renviron , либо, если возможно, общесистемный Renvron.site . Подробнее help("Startup") о том, как это сделать, см..

Ответ №1:

Нам нужно больше информации, чтобы помочь вам — «в Linux box» не так уж и специфично.

Глядя на рассматриваемую функцию, мы видим

  R> lubridate::now
 function (tzone = "")
 with_tz(Sys.time(), tzone)
 <bytecode: 0x55fd86dd68a8>
 <environment: namespace:lubridate>
 R> 
 

таким образом, базовый вызов R Sys.time() в сочетании с некоторым специфичным для пакета кодом для перехода к часовому поясу.

Теперь, как информация о часовом поясе, что-то специфичное для локальной установки, предоставляется R, не стандартизирована. Отсюда и сообщение об ошибке.

Мне это понадобилось один раз для другого пакета (моего), а R (в то время) делал недостаточно — так что смотрите

  R> gettz::gettz()
 [1] "America/Chicago"
 R> 
 

С тех пор R улучшился и добавил очень похожую эвристику (поиск в других возможных местах), поэтому она более надежна. Поэтому, пожалуйста, проверьте еще немного и скажите, знает ли R часовой пояс, даже если lubridate нет.

В любом случае вы можете (должны ?) Установить его, чтобы помочь системе.

И если R найдет ее, почему бы просто не использовать базовый R?

 R> format(Sys.time(), "%F %T %Z")  
[1] "2019-04-14 11:06:54 CDT" 
R> 
 

Комментарии:

1. Вы так и не ответили на мой вопрос о том, что показывает база R.

2. Сейчас у меня эта проблема на RHEL6, и я не контролирую сервер (я могу пожаловаться на людей, которые это делают, если это необходимо). R отлично находит часовой Sys.time()) пояс, поэтому я собираюсь использовать базовое решение R, предоставленное @DirkEddelbuettel. Спасибо, Дирк!

Ответ №2:

Вам необходимо установить часовой пояс в вашей локальной системе. Часовые пояса, такие как «Pacific», недопустимы в R, а часовые пояса, такие как «PST», являются неопределенными. Например, EST существует в Америке, но он также существует в Австралии.

R использует международные стандартные часовые пояса IANA, и вы можете найти список допустимых часовых поясов здесь .

Вы можете установить часовой пояс для вашей локальной системы с помощью Sys.setenv(TZ='America/Los_Angeles')

Если вы хотите узнать больше о работе с датами, ознакомьтесь с этой главой из книги Хэдли Уикхема и Гаррета Гролемунда R for Data Science.

Комментарии:

1. На вашем месте я бы удалил этот ответ. Вся соответствующая информация находится в базе R, см. Комментарии, которые я только что оставил под вашим вопросом.

Ответ №3:

Я получил ту же ошибку при загрузке lubridate на компьютере EC2 под управлением Amazon Linux 2. Это можно устранить, запустив sudo timedatectl set-timezone UTC запрос bash. Вы можете заменить UTC на любой часовой пояс, который вы предпочитаете, из списка, созданного timedatectl list-timezones .