Название месяца для значения в Юлии? - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно преобразовать особый формат текстовых дат в даты в Юлии.О словаре MONTHTOVALUE я узнал в документации Dates , но этот объект отсутствует в пространстве имен Dates, не дает результатов в справке и появляется только в исходном коде Github.в документации .Я использовал Date.format() с форматированием "U", чтобы определить свой собственный MONTHTOVALUE:

  # Build dictionary from month names to integers
  MONTHTOVALUE = Dict{String, Integer}()
  for i in 1:12
      month = Dates.format(Date(1990, i, 1), "U")
      MONTHTOVALUE[month] = i
  end;

  # Regular expression for date in the format [Month Year(Quarter)]
  date_regex = r"(^[A-Z][a-z]*) ?(\d{4}) ?\((I*V?)\)";
  function string_to_date(date_string)
      month = MONTHTOVALUE[replace(date_string, date_regex, s"\1")]
      year = parse(Int, replace(date_string, date_regex, s"\2"))
      return Dates.Date(year, month, 1)
  end;
  @assert Dates.Date(1860, 10, 1) == string_to_date("October 1860(III)")

Уже существует словарь MONTHTOVALUE или вы предлагаете более чистый способ?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если я правильно понимаю вопрос, вы хотите получить доступ к словарю внутри модуля Dates, который отображает названия месяцев по их номеру ("March" => 3 и т. Д.), Это правильно?

Если это так, Dates.LOCALES["english"].month_value, кажется, тот, который вы ищете:

julia> Dates.LOCALES["english"].month_value
Dict{String,Int64} with 24 entries:
  "January"   => 1
  "august"    => 8
  "May"       => 5
  "may"       => 5
  "December"  => 12
  "january"   => 1
  "August"    => 8
  "november"  => 11
  "december"  => 12
  "September" => 9
  "july"      => 7
  "september" => 9
  "October"   => 10
  "june"      => 6
  "November"  => 11
  "April"     => 4
  "February"  => 2
  "october"   => 10
  "March"     => 3
  "June"      => 6
  "april"     => 4
  "march"     => 3
  "february"  => 2
  "July"      => 7

(Также есть Dates.LOCALES["english"].month_abbr_value, если вам это нужно.)

Я предполагаю, что часть документации устарела, а MONTHTOVALUE раньше было month_value старым именем dict.

Также есть функция Dates.monthname_to_value, используемая как Dates.monthname_to_value("September",Dates.LOCALES["english"]), обеспечивающая интерфейс в вышеуказанном диктанте.

0 голосов
/ 07 июня 2018

Я не слышал о Джулии, но отрывок кажется уместным:

Поддержка синтаксического анализа месяца в текстовой форме также поддерживается с помощью символов u и U, для сокращенных и полных названий месяцев.соответственно.По умолчанию поддерживаются только английские названия месяцев, поэтому u соответствует «Jan», «Feb», «Mar» и т. Д. И U соответствует «January», «February», «March» и т. Д. Аналогично другому названию=> функции отображения значений dayname () и monthname (), пользовательские локали могут быть загружены путем передачи в locale => Dict {String, Int} сопоставления с диктофонами MONTHTOVALUEABBR и MONTHTOVALUE для сокращенных и полных названий месяцев соответственно.

https://docs.julialang.org/en/v0.6.2/manual/dates/

Редактировать: Я думаю, вы можете сделать словарь следующим образом:

monthtovalue = Dict{UTF8String, Int}()
for (value, name) in VALUETOMONTH[locale::AbstractString="english"]
    monthtovalue[lowercase(name)] = value
end
...