#r #date #output
#r #Дата #вывод
Вопрос:
Я обычно устанавливаю свою рабочую среду на английском, хотя это не мой родной язык, потому что большинство дат, которые я использую при вводе, именно так.
Однако иногда мне приходится выводить дату в длинном формате на другом языке, обычно на французском.
library(lubridate)
today()
> today()
[1] "2020-12-22"
То есть мне нужна функция, которая дает :
DateInLongFormatInFrench(today)
[1] "Mardi 22 décembre"
Что по-французски означает «вторник, 22 декабря». И я бы хотел, чтобы решение не меняло языковые настройки для всей программы, а только для этого экземпляра.
Я нашел много сообщений о том, как читать даты, но не так много о том, как их выводить
Комментарии:
1. Это будет зависеть от ваших настроек локали. В противном случае
format(today(), '%A %d %B')
должно работать2.
withr
Пакет полезен для изменения настроек локали для одной строки. (Хотя у меня возникли проблемы с Windows с французским языком — вам может быть легче, если вы не в Windows.) Но если вы можете найти правильные настройки локали / ваша ОС более совместима, чем моя, что-то вродеwithr::with_locale("LC_TIME" = "fr_FR", format(today(), '%A %d %B'))
должно сработать.
Ответ №1:
Преобразуйте даты в строки, используя format.Date
format(<my_date>, "%A %d %B")
Для вашего региона должна быть установлена франкоязычная область, например
Sys.setlocale("LC_TIME", "fr_FR")
Если вам нужно сделать это изолированно:
frenchDate <- function(x) {
locale <- Sys.getlocale("LC_TIME")
# when function exits, restore original locale
on.exit(Sys.setlocale("LC_TIME", locale))
Sys.setlocale("LC_TIME", "fr_FR")
format(x, "%A %d %B")
}
Комментарии:
1. обратите внимание для будущих читателей, что языковой стандарт также должен быть доступен: я получаю «Запрос отчетов ОС для установки языкового стандарта на ‘fr_FR’ не может быть выполнен», предположительно, потому, что он не установлен
2. Я думаю, что это правильный путь. При желании ее можно немного обобщить, используя
function(x, format = "%A %d %B", locale = "fr_FR") { ...; format(x, format = format); }
, таким образом, не жестко закодированные форматы и локали. (Это предполагает имя, подобноеformat_locale
или похожее.)3. Да, имена локалей зависят от операционной системы.
?locales
имеет довольно хорошее краткое изложение.