查看源代码 Calendar.ISO (Elixir v1.16.2)
默认的日历实现,一个遵循 ISO 8601 的公历。
此日历实现了一个前推公历,因此与当今大多数国家使用的日历兼容。 前推意味着公历闰年规则适用于所有时间,因此在公历被采纳的 1583 年之前的日期会给出不同的结果。
ISO 8601 兼容性
ISO 8601 规范功能丰富,但允许应用程序选择性地实现其大部分内容。 Elixir 做出的选择将在下面列出。
功能
标准库支持一组最小的 ISO 8601 功能。 具体来说,解析器只支持日历日期,不支持序数和星期格式。
默认情况下,Elixir 只解析扩展格式的日期/时间。 你可以选择解析基本格式的日期/时间。
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
分隔符生成符合规范的字符串表示。
示例
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 是星期日。
日历纪元。
具有存储精度的微秒。
函数
将日期时间(含时区)转换为字符串。
根据给定的 year
、month
和 day
计算日期和纪元。
根据给定的 year
、month
和 day
计算一周中的某一天。
根据给定的 year
、month
和 day
计算一年中的某一天。
返回给定年份-月份中有多少天。
将 Calendar.iso_days/0
转换为一天中的第一个时刻。
将 Calendar.iso_days/0
转换为一天中的最后一个时刻。
返回给定年份是否为闰年。
返回给定年份中有多少个月。
将 Calendar.iso_days/0
格式转换为此日历指定的日期时间格式。
返回指定日期的 Calendar.iso_days/0
格式。
将日期时间(无时区)转换为字符串。
以 :extended
格式解析日期 string
。
根据给定的 format
解析日期 string
。
以 :extended
格式解析朴素日期时间 string
。
根据给定的 format
解析朴素日期时间 string
。
以 :extended
格式解析时间 string
。
根据给定的 format
解析时间 string
。
以 :extended
格式解析 UTC 日期时间 string
。
根据给定的 format
解析 UTC 日期时间 string
。
根据给定的 year
、month
和 day
计算一年中的季度。
将天分数转换为此日历的时间表示。
返回指定时间的归一化天分数。
确定给定日期是否根据前推公历有效。
确定给定日期是否根据前推公历有效。
根据给定的 year
计算年份和纪元。
日历回调,用于根据给定的 year
、month
和 day
计算年份和纪元。
类型
@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
日历纪元。
ISO 日历有两个纪元
@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()}
函数
将给定日期转换为字符串。
默认情况下,返回以“扩展”格式格式化的日期,以便于人类阅读。 它还支持通过传递 :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 版开始)@spec datetime_to_string( year(), month(), day(), Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond(), Calendar.time_zone(), Calendar.zone_abbr(), Calendar.utc_offset(), Calendar.std_offset(), :basic | :extended ) :: String.t()
将日期时间(含时区)转换为字符串。
默认情况下,返回以“扩展”格式格式化的日期时间,以便于人类阅读。 它还支持通过传递 :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"
@spec day_of_era(year(), month(), day()) :: Calendar.day_of_era()
根据给定的 year
、month
和 day
计算日期和纪元。
示例
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}
@spec day_of_week(year(), month(), day(), :default | weekday()) :: {day_of_week(), 1, 7}
根据给定的 year
、month
和 day
计算一周中的某一天。
它是一个从 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}
@spec day_of_year(year(), month(), day()) :: day_of_year()
根据给定的 year
、month
和 day
计算一年中的某一天。
它是一个从 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
@spec day_rollover_relative_to_midnight_utc() :: {0, 1}
返回给定年份-月份中有多少天。
示例
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
@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}}
@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}}
返回给定年份是否为闰年。
示例
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
@spec months_in_year(year()) :: 12
返回给定年份中有多少个月。
示例
iex> Calendar.ISO.months_in_year(2004)
12
@spec naive_datetime_from_iso_days(Calendar.iso_days()) :: {Calendar.year(), Calendar.month(), Calendar.day(), Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond()}
将 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(year, month, day, hour, minute, second, microsecond)
查看源代码 (自 1.5.0 版本起)@spec naive_datetime_to_iso_days( Calendar.year(), Calendar.month(), Calendar.day(), Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond() ) :: Calendar.iso_days()
返回指定日期的 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(year, month, day, hour, minute, second, microsecond, format \\ :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"
以 :extended
格式解析日期 string
。
有关支持字符串的更多信息,请参见此模块如何实现 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}
根据给定的 format
解析日期 string
。
The 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}
@spec parse_naive_datetime(String.t()) :: {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}} | {:error, atom()}
以 :extended
格式解析朴素日期时间 string
。
有关支持字符串的更多信息,请参见此模块如何实现 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}}}
@spec parse_naive_datetime(String.t(), format()) :: {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}} | {:error, atom()}
根据给定的 format
解析朴素日期时间 string
。
The 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}
@spec parse_time(String.t()) :: {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}
以 :extended
格式解析时间 string
。
有关支持字符串的更多信息,请参见此模块如何实现 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}}}
@spec parse_time(String.t(), format()) :: {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}
根据给定的 format
解析时间 string
。
The 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}
@spec parse_utc_datetime(String.t()) :: {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}, utc_offset()} | {:error, atom()}
以 :extended
格式解析 UTC 日期时间 string
。
有关支持字符串的更多信息,请参见此模块如何实现 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}
@spec parse_utc_datetime(String.t(), format()) :: {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}, utc_offset()} | {:error, atom()}
根据给定的 format
解析 UTC 日期时间 string
。
The 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}
@spec quarter_of_year(year(), month(), day()) :: quarter_of_year()
根据给定的 year
、month
和 day
计算一年中的季度。
它是一个介于 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
@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}}
@spec time_to_day_fraction( Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond() ) :: Calendar.day_fraction()
返回指定时间的归一化天分数。
示例
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}
@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"
@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
确定给定日期是否根据前推公历有效。
示例
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
@spec valid_time?( Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond() ) :: boolean()
确定给定日期是否根据前推公历有效。
内置的 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
计算年份和纪元。
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
、month
和 day
计算年份和纪元。
在 ISO 日历中,新年与新纪元同时开始,因此 month
和 day
参数被丢弃。如果您只有年份可用,可以改为使用 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}