Files
ezic/src/ezic.erl
aj heller 7d19d9e751 Merge pull request #11 from arkdro/master
add api to check whether the dst is active
2013-03-07 13:48:28 -08:00

73 lines
2.0 KiB
Erlang

-module(ezic).
-include("include/ezic.hrl").
-export([
localtime/1
, utc_to_local/2
, local_to_utc/2
, has_dst_utc/2
, has_dst_local/2
]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PUBLIC API
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% returns local time in given timezone
localtime(TzName) ->
utc_to_local(erlang:universaltime(), TzName).
%% returns time in given timezone for corresponding utc time
utc_to_local(UTCDatetime, TzName) ->
NormalDatetime= ezic_date:normalize(UTCDatetime, u),
utc_to_local_handleFlatzone(UTCDatetime, ezic_db:flatzone(NormalDatetime, TzName)).
%% returns utc time for corresponding time in given timezone utc
local_to_utc(LocalDatetime, TzName) ->
NormalDatetime= ezic_date:normalize(LocalDatetime, w),
local_to_utc_handleFlatzone(LocalDatetime, ezic_db:flatzone(NormalDatetime, TzName)).
has_dst_utc(Datetime, TzName) ->
has_dst(Datetime, TzName, u).
has_dst_local(Datetime, TzName) ->
has_dst(Datetime, TzName, w).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PRIVATE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
utc_to_local_handleFlatzone(_, X={error,_}) ->
X;
utc_to_local_handleFlatzone(UTCDatetime, #flatzone{offset=Offset, dstoffset=DSTOffset}) ->
ezic_date:add_offset(
ezic_date:add_offset(
UTCDatetime
, Offset)
, DSTOffset).
local_to_utc_handleFlatzone(_, X={error, _}) ->
X;
local_to_utc_handleFlatzone(LocalDatetime, #flatzone{offset=Offset, dstoffset=DSTOffset}) ->
ezic_date:add_offset(
ezic_date:add_offset(
LocalDatetime
, Offset, {0,0,0})
, DSTOffset, {0,0,0}).
has_dst(Datetime, TzName, Flag) ->
NormalDatetime = ezic_date:normalize(Datetime, Flag),
case ezic_db:flatzone(NormalDatetime, TzName) of
#flatzone{dstoffset={0,0,0}} ->
false;
#flatzone{dstoffset={_,_,_}} ->
true
end.