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 Calendar.ISO.date_to_string用法及代碼示例
- Elixir Calendar.ISO.time_to_string用法及代碼示例
- Elixir Calendar.ISO.naive_datetime_to_string用法及代碼示例
- Elixir Calendar.ISO.naive_datetime_from_iso_days用法及代碼示例
- Elixir Calendar.ISO.day_of_era用法及代碼示例
- Elixir Calendar.ISO.valid_date?用法及代碼示例
- Elixir Calendar.ISO.day_of_week用法及代碼示例
- Elixir Calendar.ISO.parse_date用法及代碼示例
- Elixir Calendar.ISO.quarter_of_year用法及代碼示例
- Elixir Calendar.ISO.days_in_month用法及代碼示例
- Elixir Calendar.ISO.leap_year?用法及代碼示例
- Elixir Calendar.ISO.day_of_year用法及代碼示例
- Elixir Calendar.ISO.year_of_era用法及代碼示例
- Elixir Calendar.ISO.naive_datetime_to_iso_days用法及代碼示例
- Elixir Calendar.ISO.datetime_to_string用法及代碼示例
- Elixir Calendar.ISO.parse_utc_datetime用法及代碼示例
- Elixir Calendar.ISO.parse_time用法及代碼示例
- Elixir Calendar.ISO.time_from_day_fraction用法及代碼示例
- Elixir Calendar.ISO.parse_naive_datetime用法及代碼示例
- Elixir Calendar.ISO.months_in_year用法及代碼示例
- Elixir Calendar.ISO.time_to_day_fraction用法及代碼示例
- Elixir Calendar.ISO.valid_time?用法及代碼示例
- Elixir Calendar.strftime用法及代碼示例
- Elixir Calendar.time_zone_database用法及代碼示例
- Elixir Code.prepend_path用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Calendar.ISO。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。