Сейчас я использую эту функцию, которую написал сам, я полагаюсь на strftime
для всего форматирования, кроме значений, которые я хочу заменить вручную. Это может быть легко расширено до специфичных для локали c индикаторов утра / вечера или пользовательских имен или сокращений.
library(tidyverse)
library(glue)
library(lubridate)
my_strftime <- function(t, format, lang){
# replace locale specific formatting with glue template expression
format_tmp <- format %>%
str_replace_all("%a", "{a}") %>%
str_replace_all("%A", "{A}") %>%
str_replace_all("%b", "{b}") %>%
str_replace_all("%B", "{B}")
# get replacement values and template with everything except locale specific
# weekday and month names
tmp_data <- list(
template = strftime(t, format_tmp),
a = date_names_lang(lang)$day_ab[wday(t) ],
A = date_names_lang(lang)$day [wday(t) ],
b = date_names_lang(lang)$mon_ab[month(t)],
B = date_names_lang(lang)$mon [month(t)]
)
# put replacement values into templates
pmap_chr(tmp_data, function(template, a, A, b, B){
glue(template)
})
}
dates <- c(Sys.Date(), Sys.Date()+1)
my_strftime(dates, "%a %d. %b %Y", "de")
# [1] "Fr. 10. Juli 2020" "Sa. 11. Juli 2020"
my_strftime(dates, "%a %d. %b %Y", "en")
# [1] "Fri 10. Jul 2020" "Sat 11. Jul 2020"
# >
my_strftime(dates, "%A %d. %B %Y", "de")
# [1] "Freitag 10. Juli 2020" "Samstag 11. Juli 2020"
my_strftime(dates, "%A %d. %B %Y", "en")
# [1] "Friday 10. July 2020" "Saturday 11. July 2020"