Calendrical.Roc (Calendrical v0.13.0)

Copy Markdown

Implementation of the Republic of China (Minguo) calendar.

The ROC calendar is the proleptic Gregorian calendar with year numbering starting from the founding of the Republic of China on 1 January 1912:

roc_year = gregorian_year - 1911

So 1 ROC = 1912 CE and 113 ROC = 2024 CE. The calendar is the official calendar of Taiwan and is also used in some legal contexts in mainland China for documents that pre-date 1949.

Months and leap years follow the standard proleptic Gregorian rules exactly. Day boundaries are at midnight.

Reference

  • CLDR :roc calendar type. The CLDR era data places the start of the Minguo Era (:roc) at proleptic Gregorian 1912-01-01 and the Before R.O.C. era (:broc) at all earlier dates.

Summary

Functions

Identifies whether this calendar is month or week based.

Returns the calendar year as displayed on rendered calendars.

Defines the CLDR calendar type for this calendar.

Returns the cyclic year as displayed on rendered calendars.

Returns a ROC {year, month, day} tuple for the given ISO day number.

Returns the number of ISO days for the given ROC year, month, and day.

Calculates the day and era from the given year, month, and day.

Calculates the day of the year from the given year, month, and day.

Returns how many days there are in the given month.

Returns the number of days in the given ROC year and month.

Returns the number days in a a week.

Returns the number of days in the given ROC year.

Returns the extended year as displayed on rendered calendars.

Returns the offset (in years) between the ROC era and the proleptic Gregorian calendar.

Returns the Gregorian year corresponding to the given ROC year.

Calculates the ISO week of the year from the given year, month, and day.

Returns whether the given ROC year is a leap year.

Returns a Date.Range.t/0 representing a given month of a year.

Returns the month of the year from the given year, month, and day.

Returns the number of months in a leap year.

Returns the number of months in a normal year.

Returns the number of months in a year, without a year.

Returns the number of months in a given year.

Converts the t:Calendar.iso_days format to the datetime format specified by this calendar.

Returns the t:Calendar.iso_days format of the specified date.

Returns the number of periods in a given year. A period corresponds to a month in month-based calendars and a week in week-based calendars.

Adds an increment number of date_parts to a year-month-day.

Returns a Date.Range.t/0 representing a given quarter of a year.

Returns the quarter of the year from the given year, month, and day.

Returns the related Gregorian year as displayed on rendered calendars.

Returns the ROC year corresponding to the given Gregorian year.

Returns whether the given year, month, and day form a valid ROC date.

Returns a Date.Range.t/0 representing a given week of a year.

Calculates the week of the year from the given year, month, and day.

Calculates the week of the year from the given year, month, and day.

Returns the number of weeks in a given year.

Returns a Date.Range.t/0 representing a given year.

Calculates the year and era from the given year.

Calculates the year and era from the given date.

Types

day()

@type day() :: 1..31

month()

@type month() :: 1..12

year()

@type year() :: integer()

Functions

calendar_base()

Identifies whether this calendar is month or week based.

calendar_year(year, month, day)

@spec calendar_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  Calendar.year()

Returns the calendar year as displayed on rendered calendars.

cldr_calendar_type()

Defines the CLDR calendar type for this calendar.

This type is used in support of Calendrical. localize/3.

cyclic_year(year, month, day)

@spec cyclic_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  Calendar.year()

Returns the cyclic year as displayed on rendered calendars.

date_from_iso_days(iso_days)

@spec date_from_iso_days(integer()) :: {year(), month(), day()}

Returns a ROC {year, month, day} tuple for the given ISO day number.

Arguments

  • iso_days is an integer count of days since the proleptic ISO epoch.

Returns

  • A three-tuple {year, month, day} in the ROC calendar.

Examples

iex> Calendrical.Roc.date_from_iso_days(739_252)
{113, 1, 2}

date_to_iso_days(year, month, day)

@spec date_to_iso_days(year(), month(), day()) :: integer()

Returns the number of ISO days for the given ROC year, month, and day.

Arguments

  • year is any ROC year as an integer.

  • month is a month in the range 1..12.

  • day is a day-of-month.

Returns

  • An integer count of days since the proleptic ISO epoch.

Examples

iex> Calendrical.Roc.date_to_iso_days(115, 1, 1)
739982

day_of_era(year, month, day)

@spec day_of_era(Calendar.year(), Calendar.month(), Calendar.day()) ::
  {day :: Calendar.day(), era :: Calendar.era()}

Calculates the day and era from the given year, month, and day.

By default we consider on two eras: before the epoch and on-or-after the epoch.

day_of_year(year, month, day)

@spec day_of_year(Calendar.year(), Calendar.month(), Calendar.day()) :: Calendar.day()

Calculates the day of the year from the given year, month, and day.

days_in_month(month)

@spec days_in_month(Calendar.month()) ::
  Calendar.month()
  | {:ambiguous, Range.t() | [pos_integer()]}
  | {:error, :undefined}

Returns how many days there are in the given month.

Must be implemented in derived calendars because we cannot know what the calendar format is.

days_in_month(year, month)

@spec days_in_month(Calendar.year(), Calendar.month()) :: Calendar.month()
@spec days_in_month(year(), month()) :: 28..31

Returns the number of days in the given ROC year and month.

Arguments

  • year is any ROC year as an integer.

  • month is a month in the range 1..12.

Returns

  • The number of days in the month (28..31).

Examples

iex> Calendrical.Roc.days_in_month(115, 2)
28

iex> Calendrical.Roc.days_in_month(113, 2)
29

days_in_week()

Returns the number days in a a week.

days_in_year(year)

@spec days_in_year(year()) :: 365..366

Returns the number of days in the given ROC year.

Arguments

  • year is any ROC year as an integer.

Returns

  • 365 for an ordinary year or 366 for a leap year.

Examples

iex> Calendrical.Roc.days_in_year(115)
365

iex> Calendrical.Roc.days_in_year(113)
366

epoch()

epoch_day_of_week()

extended_year(year, month, day)

@spec extended_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  Calendar.year()

Returns the extended year as displayed on rendered calendars.

first_day_of_week()

gregorian_offset()

@spec gregorian_offset() :: 1911

Returns the offset (in years) between the ROC era and the proleptic Gregorian calendar.

Adding this offset to a ROC year yields the corresponding Gregorian year.

Returns

  • The integer 1911.

Examples

iex> Calendrical.Roc.gregorian_offset()
1911

gregorian_year(roc_year)

@spec gregorian_year(year()) :: integer()

Returns the Gregorian year corresponding to the given ROC year.

Arguments

  • roc_year is any ROC year as an integer.

Returns

  • An integer Gregorian year (1911 more than the input).

Examples

iex> Calendrical.Roc.gregorian_year(115)
2026

iso_week_of_year(year, month, day)

@spec iso_week_of_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  {:error, :not_defined}

Calculates the ISO week of the year from the given year, month, and day.

By default this function always returns {:error, :not_defined}.

last_day_of_week()

leap_year?(year)

@spec leap_year?(year()) :: boolean()

Returns whether the given ROC year is a leap year.

The underlying calendar is proleptic Gregorian, so the leap-year rule applies to the corresponding Gregorian year.

Arguments

  • year is any ROC year as an integer.

Returns

  • true if the year contains 366 days; otherwise false.

Examples

iex> Calendrical.Roc.leap_year?(113)
true

iex> Calendrical.Roc.leap_year?(115)
false

month(year, month)

Returns a Date.Range.t/0 representing a given month of a year.

month_of_year(year, month, day)

Returns the month of the year from the given year, month, and day.

months_in_leap_year()

Returns the number of months in a leap year.

months_in_ordinary_year()

Returns the number of months in a normal year.

months_in_year()

Returns the number of months in a year, without a year.

Returns an integer when every year has the same number of months, or {:ambiguous, first..last} for lunisolar calendars whose year length varies (e.g. the Hebrew calendar's 12 or 13 months).

months_in_year(year)

Returns the number of months in a given year.

naive_datetime_from_iso_days(arg)

Converts the t:Calendar.iso_days format to the datetime format specified by this calendar.

naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)

Returns the t:Calendar.iso_days format of the specified date.

periods_in_year(year)

Returns the number of periods in a given year. A period corresponds to a month in month-based calendars and a week in week-based calendars.

plus(year, month, day, date_part, increment, options \\ [])

Adds an increment number of date_parts to a year-month-day.

date_part can be :years, :months, :weeks or :days.

quarter(year, quarter)

Returns a Date.Range.t/0 representing a given quarter of a year.

quarter_of_year(year, month, day)

@spec quarter_of_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  Calendrical.quarter()

Returns the quarter of the year from the given year, month, and day.

roc_year(gregorian_year)

@spec roc_year(integer()) :: year()

Returns the ROC year corresponding to the given Gregorian year.

Arguments

  • gregorian_year is any proleptic Gregorian year as an integer.

Returns

  • An integer ROC year (1911 less than the input).

Examples

iex> Calendrical.Roc.roc_year(2026)
115

valid_date?(year, month, day)

@spec valid_date?(year(), month(), day()) :: boolean()

Returns whether the given year, month, and day form a valid ROC date.

Arguments

  • year is any ROC year as an integer.

  • month is a month in the range 1..12.

  • day is a day-of-month.

Returns

  • true if the date is valid; otherwise false.

Examples

iex> Calendrical.Roc.valid_date?(115, 1, 31)
true

iex> Calendrical.Roc.valid_date?(115, 2, 29)
false

week(year, week)

Returns a Date.Range.t/0 representing a given week of a year.

week_of_month(year, month, day)

@spec week_of_month(Calendar.year(), Calendar.month(), Calendar.day()) ::
  {pos_integer(), pos_integer()} | {:error, :not_defined}

Calculates the week of the year from the given year, month, and day.

By default this function always returns {:error, :not_defined}.

week_of_year(year, month, day)

@spec week_of_year(Calendar.year(), Calendar.month(), Calendar.day()) ::
  {:error, :not_defined}

Calculates the week of the year from the given year, month, and day.

By default this function always returns {:error, :not_defined}.

weeks_in_year(year)

Returns the number of weeks in a given year.

year(year)

Returns a Date.Range.t/0 representing a given year.

year_of_era(year)

@spec year_of_era(Calendar.year()) :: {year :: Calendar.year(), era :: Calendar.era()}

Calculates the year and era from the given year.

year_of_era(year, month, day)

@spec year_of_era(Calendar.year(), Calendar.month(), Calendar.day()) ::
  {year :: Calendar.year(), era :: Calendar.era()}

Calculates the year and era from the given date.