calendar
calendar
模块
calendar
模块摘要
本地和世界时间,一周中的一天,日期和时间转换。
描述
该模块提供了计算本地和通用时间、一周中的一天和多个时间转换功能。
根据当前时区和夏令时进行调整时,时间为本地时间。时间反映时间为零时的时间是普遍的,不需要对夏令时进行任何调整。全球协调时间(UTC)时间也称为格林尼治标准时间(GMT)。
时间函数local_time/0
和universal_time/0
本模块都返回日期和时间。这是因为日期和时间的单独功能可能导致日期/时间组合错位24小时。如果其中一个功能在午夜之前被调用,而另一个在午夜之后被调用,则会发生这种情况。此问题也适用于二郎山内建函数date/0
和time/0
,并且如果需要一个可靠的日期/时间标记它们的使用是强烈反对。
所有日期符合公历。这个日历于1582年由教皇格雷戈里十三世引入,并从今年开始在所有天主教国家使用。德国和荷兰的新教教区在1698年采纳了它,1752年英国紧随其后,1918年俄国(1917年十月革命根据公历在十一月发生)。
此模块中的公历日期延长回到第0年。
对于给定日期,公历日期是指直至包括指定日期在内的天数。同样,指定日期和时间的格雷戈里秒数
是直到并包括指定日期和时间的秒数。
为了及时计算时代之间的差异,请使用计算公历天或秒的函数。如果将时期指定为当地时间,则必须将它们转换为世界时间以获得时期之间经过时间的正确值。time_difference/2
不鼓励使用功能。
一年中的一周有不同的定义。该模块包含符合ISO 8601标准的一年中的一周实施。由于指定日期的星期编号可能与先前,当前或明年相同,因此指定年份和星期编号非常重要。函数iso_week_number/0
与iso_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()
类型
计算从指定的一周中的一天Year
,Month
和Day
。将星期几返回为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天。