日历 | Calendar
日历行为
该模块定义了在Elixir中处理日历,日期,时间和日期时间的职责。
目前它定义了Elixir中日历行为的类型和最小实现。Elixir中Calendar功能的目标是为互操作性提供基础,而不是提供全功能的日期时间API。
对于实际的日期,时间和日期时间结构看Date
,Time
,NaiveDateTime
和DateTime
。
请注意,年份,月份,日期等指定是过分指定的(即整数而不是1..12
几个月),因为不同的日历每月可能有不同的天数,每年的月数等等。
摘要
类型
calendar()
日历实施
date()
任何包含日期字段的地图/结构体
datetime()
任何包含日期时间字段的地图/结构体
day()day_fraction()
在日历之间转换时使用内部时间格式
hour()iso_days()
在日历之间进行转换时使用的内部日期格式。
microsecond()
微秒存储精度
minute()month()naive_datetime()
任何包含naive_datetime字段的地图/结构体
second()std_offset()
以秒为单位的时区标准偏移量(夏季时间不为零)
time()
任何包含时间字段的地图/结构体
time_zone()
根据IANA tz数据库(例如欧洲/苏黎世)的时区ID
utc_offset()
UTC时区的偏移量(以秒为单位)。
year()zone_abbr()
时区缩写(例如CET或CEST或BST等)
函数
compatible_calendars?(calendar, calendar)
如果两个日历具有相同的开始新的一天的时间,则返回true
,否则返回false
回调
date_to_string(year, month, day)
根据日历将日期转换为字符串。
datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset)
根据日历将日期时间(带时区)转换为字符串
day_of_week(year, month, day)
计算从给定的一周中的一天year
,month
和day
day_rollover_relative_to_midnight_utc()
定义给定日历的滚转时刻
days_in_month(year, month)
返回给定的一年月中有多少天。
leap_year?(year)
如果给定年份是闰年,则返回true。
naive_datetime_from_iso_days(iso_days)
转换t:iso_days
为日历的日期时间格式
naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)
将给定的日期时间(带时区)转换为t:iso_days
格式
naive_datetime_to_string(year, month, day, hour, minute, second, microsecond)
根据日历将日期时间(不带时区)转换为字符串
time_from_day_fraction(day_fraction)
皈依t:day_fraction
到日历的时间格式
time_to_day_fraction(hour, minute, second, microsecond)
将给定时间转换为t:day_fraction
格式
time_to_string(hour, minute, second, microsecond)
根据日历将时间转换为字符串。
valid_date?(year, month, day)
如果true
给定的日期在日历中描述了适当的日期,应该返回
valid_time?(hour, minute, second, microsecond)
应该回来true
如果给定的时间描述日历中的适当时间
类型
calendar()
calendar() :: module
日历实现
date()
date() :: %{optional(any) => any, :calendar => calendar, :year => year, :month => month, :day => day}
包含日期字段的任何映射/结构
datetime()
datetime() :: %{optional(any) => any, :calendar => calendar, :year => year, :month => month, :day => day, :hour => hour, :minute => minute, :second => second, :microsecond => microsecond, :time_zone => time_zone, :zone_abbr => zone_abbr, :utc_offset => utc_offset, :std_offset => std_offset}
包含日期时间字段的任何映射/结构
day()
day() :: integer
day_fraction()
day_fraction() :: {parts_in_day :: non_neg_integer, parts_per_day :: pos_integer}
在日历之间进行转换时使用内部时间格式。
它将时间表示为一天中的一小部分(从午夜开始)。parts_in_day
指定一天中有多少时间已经过去,同时parts_per_day
表示一天中有多少部分适合。
hour()
hour() :: integer
iso_days()
iso_days() :: {days :: integer, day_fraction}
在日历之间进行转换时使用的内部日期格式。
这是包含自0000-01-01 + 00:00T00:00.00000以ISO 8601表示法(也称为Proleptic Gregorian Calendar 1月1日午夜1时的午夜)以来经过的最后一天的小数部分的天数。
parts_per_day
代表当前天数是多少子部分细分(适用于不同的日历,选择一个不同的parts_per_day
可能是有意义的)。这parts_in_day
代表parts_per_day
了最后一天中有多少人已经过去了。
microsecond()
microsecond() :: {0..999999, 0..6}
微秒和存储精度。
精度表示在将微秒表示为外部格式时必须使用的位数。如果精度为0,则意味着必须跳过微秒。
minute()
minute() :: integer
month()
month() :: integer
naive_datetime()
naive_datetime() :: %{optional(any) => any, :calendar => calendar, :year => year, :month => month, :day => day, :hour => hour, :minute => minute, :second => second, :microsecond => microsecond}
包含朴素的映射/结构的任何映射/结构。[医]日期时间字段
second()
second() :: integer
std_offset()
std_offset() :: integer
以秒为单位的时区标准偏移量(夏季时间不为零)
time()
time() :: %{optional(any) => any, :hour => hour, :minute => minute, :second => second, :microsecond => microsecond}
包含时间字段的任何映射/结构
time_zone()
time_zone() :: String.t
根据IANA tz数据库(例如欧洲/苏黎世)的时区ID
utc_offset()
utc_offset() :: integer
UTC时区的偏移量(以秒为单位)。
year()
year() :: integer
zone_abbr()
zone_abbr() :: String.t
时区缩写(例如CET或CEST或BST等)
函数
compatible_calendars?(calendar, calendar)
compatible_calendars?(Calendar.calendar, Calendar.calendar) :: boolean
如果两个日历具有相同的开始新的一天的时间,则返回true
,否则返回false
。
如果两个日历不兼容,则只能在它们之间转换日期时间和时间。如果它们是兼容的,这意味着我们也可以转换日期以及它们之间的天真日期时间。
回调
date_to_string(year, month, day)
date_to_string(year, month, day) :: String.t
根据日历将日期转换为字符串。
datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset)
datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset) :: String.t
根据日历将日期时间(带时区)转换为字符串。
day_of_week(year, month, day)
day_of_week(year, month, day) :: non_neg_integer
计算星期从给定的year
,month
和day
。
day_rollover_relative_to_midnight_utc()
day_rollover_relative_to_midnight_utc() :: day_fraction
定义给定日历的滚转时刻。
在当日结束并且第二天开始的时候,这就是您的日历。
此功能的结果用于检查两个日历是否在一天的同一时间翻转。如果他们不这样做,我们只能转换它们之间的日期和时间。如果他们这样做,这意味着我们也可以在它们之间转换日期以及天真的日期时间。
这一天的分数应尽可能以最简化的形式进行比较,以便快速进行比较。
实例
- 如果在日历中,新的一天从午夜开始,则返回{0,1}。
- 如果在日历中,从日出开始新的一天,返回{1,4}。
- 如果在日历中,新的一天从中午开始,返回{1,2}。
- 如果在日历中,新的一天从日落开始,返回{3,4}。
days_in_month(year, month)
days_in_month(year, month) :: day
返回给定的一年月中有多少天。
leap_year?(year)
leap_year?(year) :: boolean
如果给定的年份是闰年,则返回true。
闰年是比正常长的一年。确切意义取决于日历。日历必须返回false
如果它不支持闰年的概念。
naive_datetime_from_iso_days(iso_days)
naive_datetime_from_iso_days(iso_days) :: {year, month, day, hour, minute, second, microsecond}
皈依t:iso_days
到日历的日期时间格式。
naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)
naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond) :: iso_days
将给定的日期时间(带时区)转换为t:iso_days
格式。
naive_datetime_to_string(year, month, day, hour, minute, second, microsecond)
naive_datetime_to_string(year, month, day, hour, minute, second, microsecond) :: String.t
根据日历将日期时间(不带时区)转换为字符串。
time_from_day_fraction(day_fraction)
time_from_day_fraction(day_fraction) :: {hour, minute, second, microsecond}
皈依t:day_fraction
到日历的时间格式。
time_to_day_fraction(hour, minute, second, microsecond)
time_to_day_fraction(hour, minute, second, microsecond) :: day_fraction
将给定时间转换为t:day_fraction
格式。
time_to_string(hour, minute, second, microsecond)
time_to_string(hour, minute, second, microsecond) :: String.t
根据日历将时间转换为字符串。
valid_date?(year, month, day)
valid_date?(year, month, day) :: boolean
如果给定的日期在日历中描述了适当的日期,应该返回true
。
valid_time?(hour, minute, second, microsecond)
valid_time?(hour, minute, second, microsecond) :: boolean
如果true
给定的时间在日历中描述了适当的时间,应该返回。