> Erlang中文手册 > local_time_to_universal_time_dst/1 把本地时间转换为世界标准时

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}}).