независимые от системы названия дней недели и месяца - PullRequest
0 голосов
/ 10 июля 2020

Есть ли простой способ получить названия дней недели и месяцев на разных языках без использования локалей ОС?

У меня есть отчет, который я хочу отобразить на немецком и английском языках sh и linux и windows. Для windows и linux доступны разные языковые стандарты или разные названия. Итак, strptime и Sys.setlocale("LC_TIME", locale) не работают, если я сначала не проверю, на какой ОС я работаю.

В пакете readr есть это для разбора дат и времени, которые я ищу для печати .

Ответы [ 2 ]

1 голос
/ 10 июля 2020

попробуйте настройки локали в некоторых lubridate -функциях

x <- as.POSIXct( "2020-07-10 13:15:45" )
#[1] "2020-07-10 13:15:45 CEST"

lubridate::wday( x, label = TRUE, abbr = FALSE, locale="English_United States")
# [1] Friday
# Levels: Sunday < Monday < Tuesday < Wednesday < Thursday < Friday < Saturday
lubridate::wday( x, label = TRUE, abbr = FALSE, locale="German_Germany")
# [1] Freitag
# Levels: Sonntag < Montag < Dienstag < Mittwoch < Donnerstag < Freitag < Samstag

lubridate::month( x, label = TRUE, abbr = FALSE, locale="English_United States")
# [1] July
# Levels: January < February < March < April < May < June < July < August < September < October < November < December
lubridate::month( x, label = TRUE, abbr = FALSE, locale="German_Germany")
# [1] Juli
# Levels: Januar < Februar < März < April < Mai < Juni < Juli < August < September < Oktober < November < Dezember
0 голосов
/ 10 июля 2020

Сейчас я использую эту функцию, которую написал сам, я полагаюсь на 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...