Erlang 20

calendar

calendar

模块

calendar

模块摘要

本地和世界时间,一周中的一天,日期和时间转换。

描述

该模块提供了计算本地和通用时间、一周中的一天和多个时间转换功能。

根据当前时区和夏令时进行调整时,时间为本地时间。时间反映时间为零时的时间是普遍的,不需要对夏令时进行任何调整。全球协调时间(UTC)时间也称为格林尼治标准时间(GMT)。

时间函数local_time/0universal_time/0本模块都返回日期和时间。这是因为日期和时间的单独功能可能导致日期/时间组合错位24小时。如果其中一个功能在午夜之前被调用,而另一个在午夜之后被调用,则会发生这种情况。此问题也适用于二郎山内建函数date/0time/0,并且如果需要一个可靠的日期/时间标记它们的使用是强烈反对。

所有日期符合公历。这个日历于1582年由教皇格雷戈里十三世引入,并从今年开始在所有天主教国家使用。德国和荷兰的新教教区在1698年采纳了它,1752年英国紧随其后,1918年俄国(1917年十月革命根据公历在十一月发生)。

此模块中的公历日期延长回到第0年。对于给定日期,公历日期是指直至包括指定日期在内的天数。同样,指定日期和时间的格雷戈里秒数是直到并包括指定日期和时间的秒数。

为了及时计算时代之间的差异,请使用计算公历天或秒的函数。如果将时期指定为当地时间,则必须将它们转换为世界时间以获得时期之间经过时间的正确值。time_difference/2不鼓励使用功能。

一年中的一周有不同的定义。该模块包含符合ISO 8601标准的一年中的一周实施。由于指定日期的星期编号可能与先前,当前或明年相同,因此指定年份和星期编号非常重要。函数iso_week_number/0iso_week_number/1返回年份和周数的元组。

数据类型

datetime() = {date(),time()}

datetime1970() = {{year1970(),month(),day()},time()}

date() = {year(),month(),day()}

year() = integer() >= 0

年不能缩写。例如,93代表93年,而不是1993年。有效范围取决于底层操作系统。日期元组必须表示有效的日期。

year1970() = 1970..10000

month() = 1..12

day() = 1..31

time() = {hour(),minute(),second()}

hour() = 0..23

minute() = 0..59

second() = 0..59

daynum() = 1..7

ldom() = 28 | 29 | 30 | 31

yearweeknum() = {year(),weeknum()}

weeknum() = 1..53

输出

date_to_gregorian_days(Date) -> Days

date_to_gregorian_days(Year, Month, Day) -> Days

类型

计算从年份0开始到指定日期结束的公历日数。

datetime_to_gregorian_seconds(DateTime) -> Seconds

类型

计算从年份0开始,到指定日期和时间结束的公历秒数。

day_of_the_week(Date) -> daynum()

day_of_the_week(Year, Month, Day) -> daynum()

类型

计算从指定的一周中的一天YearMonthDay。将星期几返回为1:星期一,2星期二等等。

gregorian_days_to_date(Days) -> date()

类型

从指定的公历天数计算日期。

gregorian_seconds_to_datetime(Seconds) -> datetime()

类型

从指定的公历秒数计算日期和时间。

is_leap_year(Year) -> boolean()

类型

检查指定年份是否为闰年。

iso_week_number() -> yearweeknum()

返回{Year, WeekNum}表示实际日期的ISO星期编号的元组。要确定实际日期,请使用功能local_time/0

iso_week_number(Date) -> yearweeknum()

类型

返回元组{Year, WeekNum}表示指定日期的ISO周号。

last_day_of_the_month(Year, Month) -> LastDay

类型

计算一个月中的天数。

local_time() -> datetime()

返回基础操作系统报告的本地时间。

local_time_to_universal_time(DateTime1) -> DateTime2

类型

从本地时间转换为通用协调时间(UTC)。DateTime1必须参考1970年1月1日之后的当地日期。

警告

此功能已弃用。local_time_to_universal_time_dst/1改为使用,因为它提供了更加正确和完整的结果。特别是对于不存在的时段,由于在切换夏令时期间被跳过,此功能仍会返回结果。

local_time_to_universal_time_dst(DateTime1) -> DateTime

类型

从本地时间转换为通用协调时间(UTC)。DateTime1必须参考1970年1月1日之后的当地日期。

返回值是0、1或2种可能的UTC时间的列表:

[]

对于{Date1, Time1}在切换夏令时时跳过的时间段内的本地,没有相应的UTC,因为本地时间是非法的(它从未发生过)。

[DstDateTimeUTC, DateTimeUTC]

对于夏令{Date1, Time1}时切换时重复周期内的本地,存在两个对应的UTC; 一个是夏令时仍处于活动状态的第一个实例,另一个是二级实例。

[DateTimeUTC]

对于所有其他当地时间,只有一个对应的UTC存在。

现在[医]到[医]日期时间%28现在%29->datetime1970()

类型

返回从返回值转换的全球标准时间(UTC)erlang:timestamp/0

now_to_local_time(Now) -> datetime1970()

类型

返回从erlang:timestamp/0...

now_to_universal_time(Now) -> datetime1970()

类型

返回从返回值转换的全球标准时间(UTC)erlang:timestamp/0

seconds_to_daystime(Seconds) -> {Days, Time}

类型

将指定秒数转换为天,小时,分钟和秒。Time总是非负的,但Days如果论证Seconds是否定的,则是负的。

seconds_to_time(Seconds) -> time()

类型

从指定的秒数计算时间。Seconds必须小于每天的秒数(86400)。

time_difference(T1, T2) -> {Days, Time}

类型

返回两个{Date, Time}元组之间的差异。T2是指晚于的时代T1

警告

此功能已过时。改为使用公历天和秒的转换函数。

time_to_seconds(Time) -> secs_per_day()

类型

返回从午夜到指定时间的秒数。

universal_time() -> datetime()

返回底层操作系统报告的通用协调时间(UTC)。如果通用时间不可用,则返回本地时间。

universal_time_to_local_time(DateTime) -> datetime()

类型

从统一协调时间(UTC)转换为当地时间。DateTime必须指1970年1月1日以后的日期。

valid_date(Date) -> boolean()

有效[医]日期%28年,月份,日%29->布尔值%28%29

类型

此函数检查日期是否有效。

闰年

每第四年都是闰年的想法并不完全正确。根据公历规则,如果以下规则之一有效,则Y年是闰年:

  • y可以被4整除,但不能被100整除。

  • y可除以400。

因此,1996年是一个闰年,1900年不是,而是2000年。

日期和时间来源

当地时间从Erlang BIF获得localtime/0。世界时间从BIF计算universaltime/0

以下内容适用:

  • 一天有86400秒。

  • 一年中有365天。

  • 闰年有366天。

  • 四年内有1461天。

  • 100年内有36524天。

  • 在400年的时间里有146097天。

  • 从1月1日到1970年1月1日有719528天。