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