#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