Я изо всех сил пытаюсь позволить R придерживаться формата даты / региональных настроек, как указано на моем компьютере с Windows.
У меня есть:
> Sys.getlocale("LC_TIME")
[1] "English_United States.1252"
Но когда я проверяю свою панель управления \ региональные и языковые настройки, у меня есть:
Format: English (United States)
Short date: M/d/yyyy
Похоже, что R полностью игнорирует настройки, относящиеся к дате. Даты в формате R жестко закодированы (?) в фиксированном формате «%Y-%m-%d»:
format.Date(Sys.Date())
[1] "2019-01-25"
Проблема возникает при взаимодействии с данными из внешних программ, которые соответствуют локальным региональным настройкам. Например, даты в формате Microsoft Excel. И сделать код универсальным для разных региональных настроек с разными форматами даты.
Я обнаружил, что это работает в некоторой степени:
sShortDate <- readRegistry("Control Panel\\International", "HCU")$sShortDate
# convert Windows date format strings into R-date-format-strings
CPformat2Rformat <- function(f) {
f %>%
gsub("yyyy", "%Y", .) %>%
gsub("M", "%m", .) %>%
gsub('d', '%d', .)
}
sShortDate <- CPformat2Rformat(sShortDate)
# now we have the right format
format.Date(Sys.Date(), sShortDate)
# and the other way around;
strptime("01/25/2019", sShortDate)
Это лучший способ справиться с этим? Или это лучшая функция, которая лучше обрабатывает форматы ShortDate и LongDate?