当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。