當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Calendar.ISO用法及代碼示例


Elixir語言中 Calendar.ISO 相關用法介紹如下。

默認日曆實現,遵循 ISO 8601 的公曆。

該日曆采用公曆,因此與當今大多數國家使用的日曆兼容。 proleptic 意味著閏年的公曆規則適用於所有時間,因此日期在 1583 年之前與公曆采用時給出不同的結果。

符合 ISO 8601 標準

ISO 8601 規範是feature-rich,但允許應用程序有選擇地實現它的大部分。 Elixir 所做的選擇如下所示。

特征

標準庫支持最小的一組可能的 ISO 8601 函數。具體來說,解析器隻支持日曆日期,不支持序數和周格式。

默認情況下,Elixir 僅解析 extended-formatted 日期/時間。您可以選擇解析 basic-formatted 日期/時間。

NaiveDateTime.to_iso8601/2 DateTime.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/1 DateTime.to_iso8601/1 中的日期格式確實使用T 分隔符生成specification-compliant 字符串表示。

例子
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}

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Calendar.ISO。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。