calendar:local_time_to_universal_time_dst/1
把本地时间转换为世界标准时
用法:
local_time_to_universal_time_dst(DateTime1) -> [DateTime]
内部实现:
-spec local_time_to_universal_time_dst(DateTime1) -> [DateTime] when
DateTime1 :: datetime1970(),
DateTime :: datetime1970().
local_time_to_universal_time_dst(DateTime) ->
UtDst = erlang:localtime_to_universaltime(DateTime, true),
Ut = erlang:localtime_to_universaltime(DateTime, false),
%% Reverse check the universal times
LtDst = erlang:universaltime_to_localtime(UtDst),
Lt = erlang:universaltime_to_localtime(Ut),
%% Return the valid universal times
case {LtDst,Lt} of
{DateTime,DateTime} when UtDst =/= Ut ->
[UtDst,Ut];
{DateTime,_} ->
[UtDst];
{_,DateTime} ->
[Ut];
{_,_} ->
[]
end.
这个函数把本地时间 DateTime1 转为一个世界标准时间(UTC,Universal Coordinated Time )。DateTime1 必须是一个1970年1月1日之后的本地时间。
返回值有以下几种结果:
- []:当切换到夏令时的期间里,本地时间 {Date1, Time1} 会被跳过,因为没有对应的 UTC 时间,本地时间是一个非法的时间(它不会发生)
- [DstDateTimeUTC, DateTimeUTC]:当从夏令时切换的期间里,本地时间 {Date1, Time1} 会重复出现,英文有 2 个对应的 UTC 时间,一个是第一个夏令时仍处于活动状态的时候,另外一个是第一个夏令时仍处于活动状态的时候。
- [DateTimeUTC]:所有的本地时间只有一个对应的 UTC 时间。
calendar:local_time_to_universal_time_dst({{2014, 7, 17}, {17, 38, 12}}).