檢視原始碼 Calendar.ISO (Elixir v1.16.2)

預設的日曆實作,一個遵循 ISO 8601 的格里曆。

這個日曆實作了一個前溯格里曆,因此與當今大多數國家使用的日曆相容。前溯表示格里曆的閏年規則適用於所有時間,因此,日期會產生與格里曆採用前的 1583 年不同的結果。

ISO 8601 相容性

ISO 8601 規範功能豐富,但允許應用程式選擇性地實作大部分內容。Elixir 做出的選擇已分類如下。

功能

標準函式庫支援一組最小的 ISO 8601 可能功能。特別是,解析器僅支援日曆日期,不支援序數和週格式。

預設情況下,Elixir 僅解析延伸格式的日期/時間。您可以選擇解析基本格式的日期/時間。

NaiveDateTime.to_iso8601/2DateTime.to_iso8601/2 允許您產生基本或延伸格式的字串,而 Calendar.strftime/2 允許您以其他您想要的格式來格式化日期時間。

Elixir 不支援精確度降低的格式(例如,沒有日期元件的日期)或最低元件中的小數精度(例如 10:01:25,5)。沒有函式可以解析 ISO 8601 持續時間或時間間隔。

範例

解析時,Elixir 預設會使用延伸格式

iex> Calendar.ISO.parse_naive_datetime("2015-01-23T23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123T235007")
{:error, :invalid_format}

如果需要,可以將解析限制為基本格式

iex> Calendar.ISO.parse_naive_datetime("20150123T235007Z", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123T235007Z", :extended)
{:error, :invalid_format}

解析時僅支援日曆日期;不支援序數和週日期。

iex> Calendar.ISO.parse_date("2015-04-15")
{:ok, {2015, 4, 15}}
iex> Calendar.ISO.parse_date("2015-105")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-W16")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-W016-3")
{:error, :invalid_format}

年、月、日、時、分和秒必須完整指定

iex> Calendar.ISO.parse_date("2015-04-15")
{:ok, {2015, 4, 15}}
iex> Calendar.ISO.parse_date("2015-04")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015")
{:error, :invalid_format}

iex> Calendar.ISO.parse_time("23:50:07.0123456")
{:ok, {23, 50, 7, {12345, 6}}}
iex> Calendar.ISO.parse_time("23:50:07")
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("23:50")
{:error, :invalid_format}
iex> Calendar.ISO.parse_time("23")
{:error, :invalid_format}

擴充

解析器和格式化器採用一個 ISO 8601 擴充:擴充年表示法。

這允許日期加上 +- 符號作為前綴,將可表達的年份範圍從預設(0000..9999)擴充到 -9999..9999。Elixir 仍將此格式中的年份限制為四位數字。

範例

iex> Calendar.ISO.parse_date("-2015-01-23")
{:ok, {-2015, 1, 23}}
iex> Calendar.ISO.parse_date("+2015-01-23")
{:ok, {2015, 1, 23}}

iex> Calendar.ISO.parse_naive_datetime("-2015-01-23 23:50:07")
{:ok, {-2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("+2015-01-23 23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_utc_datetime("-2015-01-23 23:50:07Z")
{:ok, {-2015, 1, 23, 23, 50, 7, {0, 0}}, 0}
iex> Calendar.ISO.parse_utc_datetime("+2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}

新增

ISO 8601 不允許使用空白取代 T 作為日期和時間之間的分隔符號,無論是在解析還是格式化時。這是一個相當常見的表示法,Elixir 在解析時允許使用它。

NaiveDateTime.to_iso8601/1DateTime.to_iso8601/1 中格式化日期時會產生使用 T 分隔符號的符合規格的字串表示法。

範例

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07.0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23T23:50:07.0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07.0123456Z")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}, 0}
iex> Calendar.ISO.parse_utc_datetime("2015-01-23T23:50:07.0123456Z")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}, 0}

摘要

類型

「公元前」或「西元前」(BCE),適用於小於 1 的年份。

「公元」或「西元」(CE),從 1 年開始。

表示星期幾的整數,其中 1 是星期一,7 是星期日。

日曆紀元。

具有儲存精度的微秒。

函式

將給定的日期轉換為字串。

從給定的 yearmonthday 計算出日和紀元。

從給定的 yearmonthday 計算出星期幾。

從給定的 , 計算一年中的第幾天。

傳回給定年月中有幾天。

Calendar.iso_days/0 轉換為一天的第一個時刻。

Calendar.iso_days/0 轉換為一天的最後一個時刻。

傳回給定的年份是否為閏年。

傳回給定年份中有幾個月。

Calendar.iso_days/0 格式轉換為此日曆指定的日期時間格式。

:extended 格式分析日期 字串

根據給定的 格式 分析日期 字串

:extended 格式分析樸素日期時間 字串

根據給定的 格式 分析樸素日期時間 字串

:extended 格式分析時間 字串

根據給定的 格式 分析時間 字串

:extended 格式分析 UTC 日期時間 字串

根據給定的 格式 分析 UTC 日期時間 字串

從給定的 , 計算一年中的第幾個季度。

將一天的分數轉換為此日曆的時間表示。

傳回指定時間的正規化一天分數。

將給定的時間轉換為字串。

根據前儒略曆法判斷給定的日期是否有效。

根據前儒略曆法判斷給定的日期是否有效。

從給定的 計算年和紀元。

日曆回呼,從給定的 計算年和紀元。

類型

@type bce() :: 0

「公元前」或「西元前」(BCE),適用於小於 1 的年份。

@type ce() :: 1

「公元」或「西元」(CE),從 1 年開始。

@type day() :: 1..31
@type day_of_week() :: 1..7

表示星期幾的整數,其中 1 是星期一,7 是星期日。

@type day_of_year() :: 1..366
@type era() :: bce() | ce()

日曆紀元。

ISO 日曆有兩個紀元

  • 西元 - 從 1 年開始,定義為紀元 1
  • 西元前 - 小於 1 年,定義為紀元 0
@type format() :: :basic | :extended
@type hour() :: 0..23
@type microsecond() :: {0..999_999, 0..6}

具有儲存精度的微秒。

精確度代表在外部格式中表示微秒時必須使用的數字位數。如果精確度為 0,表示必須略過微秒。

@type minute() :: 0..59
@type month() :: 1..12
@type quarter_of_year() :: 1..4
@type second() :: 0..59
@type utc_offset() :: integer()
@type weekday() ::
  :monday | :tuesday | :wednesday | :thursday | :friday | :saturday | :sunday
@type year() :: -9999..9999
@type year_of_era() :: {1..10000, era()}

函式

連結到此函式

date_to_string(year, month, day, format \\ :extended)

檢視原始碼 (自 1.4.0 起)
@spec date_to_string(year(), month(), day(), :basic | :extended) :: String.t()

將給定的日期轉換為字串。

預設情況下,會以「延伸」格式回傳日期,以利人類閱讀。也可以透過傳遞 :basic 選項來支援「基本」格式。

範例

iex> Calendar.ISO.date_to_string(2015, 2, 28)
"2015-02-28"
iex> Calendar.ISO.date_to_string(2017, 8, 1)
"2017-08-01"
iex> Calendar.ISO.date_to_string(-99, 1, 31)
"-0099-01-31"

iex> Calendar.ISO.date_to_string(2015, 2, 28, :basic)
"20150228"
iex> Calendar.ISO.date_to_string(-99, 1, 31, :basic)
"-00990131"
連結到此函式

datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset, format \\ :extended)

檢視原始碼 (自 1.4.0 起)

將日期時間(含時區)轉換為字串。

預設情況下,會以「延伸」格式回傳日期時間,以利人類閱讀。也可以透過傳遞 :basic 選項來支援「基本」格式。

範例

iex> time_zone = "Etc/UTC"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 0, 0)
"2017-08-01 01:02:03.00000Z"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 3600, 0)
"2017-08-01 01:02:03.00000+01:00"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 3600, 3600)
"2017-08-01 01:02:03.00000+02:00"

iex> time_zone = "Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CET", 3600, 0)
"2017-08-01 01:02:03.00000+01:00 CET Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CDT", 3600, 3600)
"2017-08-01 01:02:03.00000+02:00 CDT Europe/Berlin"

iex> time_zone = "America/Los_Angeles"
iex> Calendar.ISO.datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 5}, time_zone, "PST", -28800, 0)
"2015-02-28 01:02:03.00000-08:00 PST America/Los_Angeles"
iex> Calendar.ISO.datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 5}, time_zone, "PDT", -28800, 3600)
"2015-02-28 01:02:03.00000-07:00 PDT America/Los_Angeles"

iex> time_zone = "Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CET", 3600, 0, :basic)
"20170801 010203.00000+0100 CET Europe/Berlin"
連結到此函式

day_of_era(year, month, day)

檢視原始碼 (自 1.8.0 起)
@spec day_of_era(year(), month(), day()) :: Calendar.day_of_era()

從給定的 yearmonthday 計算出日和紀元。

範例

iex> Calendar.ISO.day_of_era(0, 1, 1)
{366, 0}
iex> Calendar.ISO.day_of_era(1, 1, 1)
{1, 1}
iex> Calendar.ISO.day_of_era(0, 12, 31)
{1, 0}
iex> Calendar.ISO.day_of_era(0, 12, 30)
{2, 0}
iex> Calendar.ISO.day_of_era(-1, 12, 31)
{367, 0}
連結到此函式

day_of_week(year, month, day, starting_on)

檢視原始碼 (自 1.11.0 起)
@spec day_of_week(year(), month(), day(), :default | weekday()) ::
  {day_of_week(), 1, 7}

從給定的 yearmonthday 計算出星期幾。

它是一個介於 1 到 7 之間的整數,其中 1 是指定的 starting_on 星期幾。例如,如果 starting_on 設為 :monday,則 1 是星期一,7 是星期日。

starting_on 也可能是 :default,這等同於 :monday

範例

iex> Calendar.ISO.day_of_week(2016, 10, 31, :monday)
{1, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 1, :monday)
{2, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 2, :monday)
{3, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 3, :monday)
{4, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 4, :monday)
{5, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 5, :monday)
{6, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 6, :monday)
{7, 1, 7}
iex> Calendar.ISO.day_of_week(-99, 1, 31, :monday)
{4, 1, 7}

iex> Calendar.ISO.day_of_week(2016, 10, 31, :sunday)
{2, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 1, :sunday)
{3, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 2, :sunday)
{4, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 3, :sunday)
{5, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 4, :sunday)
{6, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 5, :sunday)
{7, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 6, :sunday)
{1, 1, 7}
iex> Calendar.ISO.day_of_week(-99, 1, 31, :sunday)
{5, 1, 7}

iex> Calendar.ISO.day_of_week(2016, 10, 31, :saturday)
{3, 1, 7}
連結到此函式

day_of_year(年, 月, 日)

檢視原始碼 (自 1.8.0 起)
@spec day_of_year(year(), month(), day()) :: day_of_year()

從給定的 , 計算一年中的第幾天。

它是一個介於 1 到 366 之間的整數。

範例

iex> Calendar.ISO.day_of_year(2016, 1, 31)
31
iex> Calendar.ISO.day_of_year(-99, 2, 1)
32
iex> Calendar.ISO.day_of_year(2018, 2, 28)
59
連結到此函式

day_rollover_relative_to_midnight_utc()

檢視原始碼 (自 1.5.0 起)
@spec day_rollover_relative_to_midnight_utc() :: {0, 1}

請參閱 Calendar.day_rollover_relative_to_midnight_utc/0 以取得文件。

連結到此函式

days_in_month(年, 月)

檢視原始碼 (自 1.4.0 起)
@spec days_in_month(year(), month()) :: 28..31

傳回給定年月中有幾天。

範例

iex> Calendar.ISO.days_in_month(1900, 1)
31
iex> Calendar.ISO.days_in_month(1900, 2)
28
iex> Calendar.ISO.days_in_month(2000, 2)
29
iex> Calendar.ISO.days_in_month(2001, 2)
28
iex> Calendar.ISO.days_in_month(2004, 2)
29
iex> Calendar.ISO.days_in_month(2004, 4)
30
iex> Calendar.ISO.days_in_month(-1, 5)
31
連結到此函式

iso_days_to_beginning_of_day(arg)

檢視原始碼 (自 1.15.0 起)
@spec iso_days_to_beginning_of_day(Calendar.iso_days()) :: Calendar.iso_days()

Calendar.iso_days/0 轉換為一天的第一個時刻。

範例

iex> Calendar.ISO.iso_days_to_beginning_of_day({0, {0, 86400000000}})
{0, {0, 86400000000}}
iex> Calendar.ISO.iso_days_to_beginning_of_day({730485, {43200000000, 86400000000}})
{730485, {0, 86400000000}}
iex> Calendar.ISO.iso_days_to_beginning_of_day({730485, {46800000000, 86400000000}})
{730485, {0, 86400000000}}
連結到此函式

iso_days_to_end_of_day(arg)

檢視原始碼 (自 1.15.0 起)
@spec iso_days_to_end_of_day(Calendar.iso_days()) :: Calendar.iso_days()

Calendar.iso_days/0 轉換為一天的最後一個時刻。

範例

iex> Calendar.ISO.iso_days_to_end_of_day({0, {0, 86400000000}})
{0, {86399999999, 86400000000}}
iex> Calendar.ISO.iso_days_to_end_of_day({730485, {43200000000, 86400000000}})
{730485, {86399999999, 86400000000}}
iex> Calendar.ISO.iso_days_to_end_of_day({730485, {46800000000, 86400000000}})
{730485, {86399999999, 86400000000}}
連結到此函式

leap_year?(年)

檢視原始碼 (自 1.3.0 起)
@spec leap_year?(year()) :: boolean()

傳回給定的年份是否為閏年。

範例

iex> Calendar.ISO.leap_year?(2000)
true
iex> Calendar.ISO.leap_year?(2001)
false
iex> Calendar.ISO.leap_year?(2004)
true
iex> Calendar.ISO.leap_year?(1900)
false
iex> Calendar.ISO.leap_year?(-4)
true
連結到此函式

months_in_year(年)

檢視原始碼 (自 1.7.0 起)
@spec months_in_year(year()) :: 12

傳回給定年份中有幾個月。

範例

iex> Calendar.ISO.months_in_year(2004)
12
連結到此函式

naive_datetime_from_iso_days(arg)

檢視原始碼 (自 1.5.0 起)

Calendar.iso_days/0 格式轉換為此日曆指定的日期時間格式。

範例

iex> Calendar.ISO.naive_datetime_from_iso_days({0, {0, 86400}})
{0, 1, 1, 0, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({730_485, {0, 86400}})
{2000, 1, 1, 0, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({730_485, {43200, 86400}})
{2000, 1, 1, 12, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({-365, {0, 86400000000}})
{-1, 1, 1, 0, 0, 0, {0, 6}}
連結到此函式

naive_datetime_to_iso_days(年, 月, 日, 時, 分, 秒, 微秒)

檢視原始碼 (自 1.5.0 起)

傳回指定的日期的 Calendar.iso_days/0 格式。

範例

iex> Calendar.ISO.naive_datetime_to_iso_days(0, 1, 1, 0, 0, 0, {0, 6})
{0, {0, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(2000, 1, 1, 12, 0, 0, {0, 6})
{730485, {43200000000, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(2000, 1, 1, 13, 0, 0, {0, 6})
{730485, {46800000000, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(-1, 1, 1, 0, 0, 0, {0, 6})
{-365, {0, 86400000000}}
連結到此函式

naive_datetime_to_string(年, 月, 日, 時, 分, 秒, 微秒, 格式 \\ :extended)

檢視原始碼 (自 1.4.0 起)
@spec naive_datetime_to_string(
  year(),
  month(),
  day(),
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond(),
  :basic | :extended
) :: String.t()

將日期時間(沒有時區)轉換為字串。

預設情況下,會以「延伸」格式回傳日期時間,以利人類閱讀。也可以透過傳遞 :basic 選項來支援「基本」格式。

範例

iex> Calendar.ISO.naive_datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 6})
"2015-02-28 01:02:03.000004"
iex> Calendar.ISO.naive_datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5})
"2017-08-01 01:02:03.00000"

iex> Calendar.ISO.naive_datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 6}, :basic)
"20150228 010203.000004"
連結到此函式

parse_date(字串)

檢視原始碼 (自 1.10.0 起)
@spec parse_date(String.t()) :: {:ok, {year(), month(), day()}} | {:error, atom()}

:extended 格式分析日期 字串

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_date("2015-01-23")
{:ok, {2015, 1, 23}}

iex> Calendar.ISO.parse_date("2015:01:23")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-01-32")
{:error, :invalid_date}
連結到此函式

parse_date(字串, 格式)

檢視原始碼 (自 1.12.0 起)
@spec parse_date(String.t(), format()) ::
  {:ok, {year(), month(), day()}} | {:error, atom()}

根據給定的 格式 分析日期 字串

format 可以是 :basic:extended

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_date("20150123", :basic)
{:ok, {2015, 1, 23}}
iex> Calendar.ISO.parse_date("20150123", :extended)
{:error, :invalid_format}
連結到此函式

parse_naive_datetime(字串)

檢視原始碼 (自 1.10.0 起)
@spec parse_naive_datetime(String.t()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}}
  | {:error, atom()}

:extended 格式分析樸素日期時間 字串

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07-02:30")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07.0")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 1}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07,0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}
連結到此函式

parse_naive_datetime(字串, 格式)

檢視原始碼 (自 1.12.0 起)
@spec parse_naive_datetime(String.t(), format()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}}
  | {:error, atom()}

根據給定的 格式 分析樸素日期時間 字串

format 可以是 :basic:extended

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_naive_datetime("20150123 235007", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123 235007", :extended)
{:error, :invalid_format}
連結到此函式

parse_time(字串)

檢視原始碼 (自 1.10.0 起)
@spec parse_time(String.t()) ::
  {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}

:extended 格式分析時間 字串

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_time("23:50:07")
{:ok, {23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_time("23:50:07Z")
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("T23:50:07Z")
{:ok, {23, 50, 7, {0, 0}}}
連結到此函式

parse_time(字串, 格式)

檢視原始碼 (自 1.12.0 起)
@spec parse_time(String.t(), format()) ::
  {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}

根據給定的 格式 分析時間 字串

format 可以是 :basic:extended

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_time("235007", :basic)
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("235007", :extended)
{:error, :invalid_format}
連結到此函式

parse_utc_datetime(字串)

檢視原始碼 (自 1.10.0 起)
@spec parse_utc_datetime(String.t()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()},
   utc_offset()}
  | {:error, atom()}

:extended 格式分析 UTC 日期時間 字串

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07+02:30")
{:ok, {2015, 1, 23, 21, 20, 7, {0, 0}}, 9000}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07")
{:error, :missing_offset}
連結到此函式

parse_utc_datetime(字串, 格式)

檢視原始碼 (自 1.12.0 起)
@spec parse_utc_datetime(String.t(), format()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()},
   utc_offset()}
  | {:error, atom()}

根據給定的 格式 分析 UTC 日期時間 字串

format 可以是 :basic:extended

如需進一步了解支援的字串,請參閱此模組如何實作 ISO 8601

範例

iex> Calendar.ISO.parse_utc_datetime("20150123 235007Z", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}
iex> Calendar.ISO.parse_utc_datetime("20150123 235007Z", :extended)
{:error, :invalid_format}
連結到此函式

quarter_of_year(年, 月, 日)

檢視原始碼 (自 1.8.0 起)
@spec quarter_of_year(year(), month(), day()) :: quarter_of_year()

從給定的 , 計算一年中的第幾個季度。

它是一個介於 1 到 4 之間的整數。

範例

iex> Calendar.ISO.quarter_of_year(2016, 1, 31)
1
iex> Calendar.ISO.quarter_of_year(2016, 4, 3)
2
iex> Calendar.ISO.quarter_of_year(-99, 9, 31)
3
iex> Calendar.ISO.quarter_of_year(2018, 12, 28)
4
連結到此函式

time_from_day_fraction(arg)

檢視原始碼 (自 1.5.0 起)
@spec time_from_day_fraction(Calendar.day_fraction()) ::
  {hour(), minute(), second(), microsecond()}

將一天的分數轉換為此日曆的時間表示。

範例

iex> Calendar.ISO.time_from_day_fraction({1, 2})
{12, 0, 0, {0, 6}}
iex> Calendar.ISO.time_from_day_fraction({13, 24})
{13, 0, 0, {0, 6}}
連結到此函式

time_to_day_fraction(時, 分, 秒, arg)

檢視原始碼 (自 1.5.0 起)

傳回指定時間的正規化一天分數。

範例

iex> Calendar.ISO.time_to_day_fraction(0, 0, 0, {0, 6})
{0, 86400000000}
iex> Calendar.ISO.time_to_day_fraction(12, 34, 56, {123, 6})
{45296000123, 86400000000}
連結到此函式

time_to_string(時, 分, 秒, 微秒, 格式 \\ :extended)

檢視原始碼 (自 1.5.0 起)
@spec time_to_string(
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond(),
  :basic | :extended
) :: String.t()

將給定的時間轉換為字串。

預設情況下,會以「延伸」格式回傳時間,以方便人類閱讀。它也支援「基本」格式,只要傳入 :basic 選項即可。

範例

iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6})
"02:02:02.000002"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 2})
"02:02:02.00"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 0})
"02:02:02"

iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6}, :basic)
"020202.000002"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6}, :extended)
"02:02:02.000002"
連結到此函式

time_unit_to_precision(整數)

檢視原始碼 (自 1.15.0 起)
@spec time_unit_to_precision(System.time_unit()) :: 0..6

System.time_unit/0 轉換為精度。

基於整數的時間單位總是會取得最大精度。

範例

iex> Calendar.ISO.time_unit_to_precision(:nanosecond)
6

iex> Calendar.ISO.time_unit_to_precision(:second)
0

iex> Calendar.ISO.time_unit_to_precision(1)
6
連結到此函式

valid_date?(年, 月, 日)

檢視原始碼 (自 1.5.0 起)
@spec valid_date?(year(), month(), day()) :: boolean()

根據前儒略曆法判斷給定的日期是否有效。

範例

iex> Calendar.ISO.valid_date?(2015, 2, 28)
true
iex> Calendar.ISO.valid_date?(2015, 2, 30)
false
iex> Calendar.ISO.valid_date?(-1, 12, 31)
true
iex> Calendar.ISO.valid_date?(-1, 12, 32)
false
連結到此函式

valid_time?(時, 分, 秒, 微秒)

檢視原始碼 (自 1.5.0 起)

根據前儒略曆法判斷給定的日期是否有效。

內建 Calendar.ISO 不支援閏秒。

範例

iex> Calendar.ISO.valid_time?(10, 50, 25, {3006, 6})
true
iex> Calendar.ISO.valid_time?(23, 59, 60, {0, 0})
false
iex> Calendar.ISO.valid_time?(24, 0, 0, {0, 0})
false
連結到此函式

year_of_era(年)

檢視原始碼 (自 1.8.0 起)
@spec year_of_era(year()) :: {1..10000, era()}

從給定的 計算年和紀元。

ISO 日曆有兩個紀元:「當前紀元」(CE) 從 1 年開始,定義為紀元 1。而「當前紀元前」(BCE) 是指小於 1 的年份,定義為紀元 0

範例

iex> Calendar.ISO.year_of_era(1)
{1, 1}
iex> Calendar.ISO.year_of_era(2018)
{2018, 1}
iex> Calendar.ISO.year_of_era(0)
{1, 0}
iex> Calendar.ISO.year_of_era(-1)
{2, 0}
連結到此函式

year_of_era(年, 月, 日)

檢視原始碼 (自 1.13.0 起)
@spec year_of_era(year(), month(), day()) :: {1..10000, era()}

日曆回呼,從給定的 計算年和紀元。

在 ISO 日曆中,新年與新紀元重疊,因此 monthday 參數會被捨棄。如果您只有年份可用,您可以改用 year_of_era/1

範例

iex> Calendar.ISO.year_of_era(1, 1, 1)
{1, 1}
iex> Calendar.ISO.year_of_era(2018, 12, 1)
{2018, 1}
iex> Calendar.ISO.year_of_era(0, 1, 1)
{1, 0}
iex> Calendar.ISO.year_of_era(-1, 12, 1)
{2, 0}