Массив названий или сокращений календарных месяцев

#julia

#джулия

Вопрос:

В базе R у нас есть простой доступ к массиву, содержащему названия календарных месяцев, month.names , и к массиву, содержащему сокращения календарных месяцев, month.abb :

 > month.name
# [1] "January"   "February"  "March"     "April"     "May"       "June" 
# [7] "July"      "August"    "September" "October"   "November"  "December"

> month.abb
# [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
 

Аналогично, в Python в модуле стандартной библиотеки есть два объекта, похожих на массивы calendar :

 >>> from calendar import month_name, month_abbr
>>> list(month_name)
# ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
>>> list(month_abbr)
# ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
 

Есть ли у Джулии аналогичный массив названий месяцев в стандартном библиотечном Dates модуле или, возможно, в стороннем пакете?

Ответ №1:

@hckr предоставил хороший ответ о том, где эти вещи в настоящее время хранятся внутри. Однако LOCALES не экспортируется Dates , и мы должны стараться избегать явного использования неэкспортированных объектов из модулей. В этом случае вы могли бы получить названия месяцев с помощью (экспортированной) функции monthname :

 julia> monthname.(1:12)
12-element Array{String,1}:
 "January"  
 "February" 
 "March"    
 "April"    
 "May"      
 "June"     
 "July"     
 "August"   
 "September"
 "October"  
 "November" 
 "December" 
 

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

1. Вы забыли основное правило: «Никогда не используйте collect » 😉 monthname.(1:12) .

2. Я действительно не знал, что существует monthname метод, который принимает целое число в качестве номера месяца, когда я писал свой ответ. Интересно, что это еще не задокументировано. Я отредактировал свой ответ, чтобы указать на ваш правильный ответ.

3. Я согласен с тем, что целочисленные методы для monthname , monthabbr , dayname , и dayabbr должны быть задокументированы.

4. Я открыл проблему в репозитории julia github: github.com/JuliaLang/julia/issues/31761

5. @DNF Ага! Старые, плохие привычки MatLab 🙂 Обновлен ответ

Ответ №2:

Редактировать: смотрите Правильный ответ @Colin T Bowers. Для monthname monthabbr dayname dayabbr извлечения этих имен и сокращений следует использовать функции , , ,, например dayabbr.(1:7) , или dayabbr(2) . Эти функции также могут принимать locale аргумент для предоставления имен / сокращений на других языках / языках. Мой ответ касался того, где в настоящее время хранятся внутренние данные.

У него есть. Они хранятся в Dict доступных языках a для (по умолчанию только английский, хотя вы можете добавить другие). Вы можете получить к ним доступ, например Dates.LOCALES["english"] , с помощью . Это даст вам a struct в следующей форме.

 struct DateLocale
    months::Vector{String}
    months_abbr::Vector{String}
    days_of_week::Vector{String}
    days_of_week_abbr::Vector{String}
    month_value::Dict{String, Int}
    month_abbr_value::Dict{String, Int}
    day_of_week_value::Dict{String, Int}
    day_of_week_abbr_value::Dict{String, Int}
end
 

Итак, Dates.LOCALES["english"].months_abbr мы предоставим вам сокращения месяцев на английском языке в виде массива строк. Вы также можете получить дни недели и их сокращения. Вы также можете добавить другие локали к этому dict с помощью DateLocale конструкторов.

Информация в Dates.LOCALES['localename'] также используется при анализе дат в localename locale.

https://docs.julialang.org/en/v1/stdlib/Dates/index.html#Query-Functions-1