diff --git a/src/localtime.erl b/src/localtime.erl index 42781e3..ea07769 100644 --- a/src/localtime.erl +++ b/src/localtime.erl @@ -17,6 +17,9 @@ ,tz_name/2 ,tz_shift/2 ,tz_shift/3 + ,get_timezone/1 + ,list_timezones/0 + ,adjust_datetime/2 ]). % utc_to_local(UtcDateTime, Timezone) -> LocalDateTime | [LocalDateTime, DstLocalDateTime] | {error, ErrDescr} @@ -185,14 +188,20 @@ tz_shift(LocalDateTime, TimezoneFrom, TimezoneTo) -> Err end. -% ======================================================================= -% privates -% ======================================================================= - adjust_datetime(DateTime, Minutes) -> Seconds = calendar:datetime_to_gregorian_seconds(DateTime) + Minutes * 60, calendar:gregorian_seconds_to_datetime(Seconds). +get_timezone(TimeZone) -> + get_timezone_inner(TimeZone). + +list_timezones() -> + dict:fetch_keys(?tz_index). + +% ======================================================================= +% privates +% ======================================================================= + invert_shift(Minutes) -> -Minutes. @@ -222,7 +231,7 @@ tr_char([H|T], From, To, Acc) -> end. -define(SPACE_CHAR, 32). -get_timezone(TimeZone) -> +get_timezone_inner(TimeZone) -> TimeZoneNoSpaces = tr_char(TimeZone, ?SPACE_CHAR, $_), case dict:find(TimeZoneNoSpaces, ?tz_index) of error -> diff --git a/src/localtime_dst.erl b/src/localtime_dst.erl index 4c0cb37..ca4d3e6 100644 --- a/src/localtime_dst.erl +++ b/src/localtime_dst.erl @@ -5,6 +5,9 @@ -author("Dmitry Melnikov "). +-include("tz_database.hrl"). +-include("tz_index.hrl"). + -export( [ check/2 @@ -16,6 +19,13 @@ % check(DateTime, TimeZone) -> is_in_dst | is_not_in_dst | ambiguous_time | time_not_exists % DateTime = DateTime() % TimeZone = tuple() +check(DateTime, Timezone) when is_list(Timezone) -> + case lists:keyfind(localtime:get_timezone(Timezone), 1, ?tz_database) of + false -> + {error, unknown_tz}; + TZ -> + check(DateTime, TZ) + end; check({Date = {Year, _, _},Time}, {_, _, _, _Shift, DstShift, DstStartRule, DstStartTime, DstEndRule, DstEndTime}) -> DstStartDay = get_dst_day_of_year(DstStartRule, Year), DstEndDay = get_dst_day_of_year(DstEndRule, Year),