Packages
ex_cldr_calendars
1.12.1
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
1.26.4
1.26.3
1.26.2
1.26.1
1.26.0
1.25.2
1.25.1
1.25.0
1.24.2
1.24.1
1.24.0
retired
1.23.1
1.23.0
1.22.1
1.22.0
1.21.0
1.20.0
1.19.0
1.18.1
1.18.0
1.17.3
1.17.2
1.17.1
1.17.0
1.17.0-rc.3
1.17.0-rc.2
1.17.0-rc.1
1.17.0-rc.0
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.1
1.14.0
1.13.0
1.13.0-rc.1
1.13.0-rc.0
1.12.1
1.12.0
1.11.0
1.11.0-rc.0
1.10.1
1.10.0
1.9.0
1.8.1
1.8.0
1.8.0-rc.0
1.7.1
1.7.0
1.6.0
1.5.1
1.5.0
retired
1.4.0
retired
1.3.0
retired
1.2.0
retired
1.1.0
retired
1.0.0
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.1
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
Localized month- and week-based calendars and calendar functions based upon CLDR data.
Current section
Files
Jump to
Current section
Files
lib/cldr/calendar/fiscal_years.ex
defmodule Cldr.Calendar.FiscalYear do
@fiscal_year_data "./priv/fiscal_years_by_territory.csv"
[_headings | rows] =
@fiscal_year_data
|> File.read!()
|> String.split("\r\n")
rows =
Enum.map(rows, fn row ->
String.split(row, ~r/(,\"|\",)/)
|> Enum.flat_map(fn r ->
if String.contains?(r, "\"") do
["dont_care"]
else
String.split(r, ",")
end
end)
end)
@fiscal_year_by_territory rows
|> Enum.map(fn
[_, "", _, _, _month, _day, _min_days, _] ->
nil
[
_,
territory,
_,
"Cldr.Calendar.Gregorian" = calendar,
month,
_day,
_min_days,
_
] ->
{:ok, territory} = Cldr.validate_territory(territory)
calendar = Module.concat([calendar])
month = String.to_integer(month)
{territory, [calendar: calendar, month: month]}
_other ->
nil
end)
|> Enum.reject(&is_nil/1)
|> Map.new()
@known_fiscal_calendars Map.keys(@fiscal_year_by_territory)
def known_fiscal_years do
@fiscal_year_by_territory
end
def known_fiscal_calendars do
@known_fiscal_calendars
end
def calendar_for(territory) do
with {:ok, territory} <- Cldr.validate_territory(territory),
{:ok, territory} <- known_fiscal_calendar(territory) do
get_or_create_calendar_for(territory, Map.get(known_fiscal_years(), territory))
end
end
defp known_fiscal_calendar(territory) do
if territory in @known_fiscal_calendars do
{:ok, territory}
else
{:error,
{Cldr.UnknownCalendarError, "Fiscal calendar is unknown for #{inspect(territory)}"}}
end
end
defp get_or_create_calendar_for(territory, config) do
module = Module.concat(Cldr.Calendar.FiscalYear, territory)
Cldr.Calendar.new(module, :month, config)
end
end