From 3376b7295e6903d7fb28ba97de5cd72688719fb7 Mon Sep 17 00:00:00 2001 From: Magnus Klaar Date: Fri, 9 Mar 2012 20:26:06 +0100 Subject: Fix issue #157 relating to daylight savings time. --- src/cowboy_clock.erl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/cowboy_clock.erl') diff --git a/src/cowboy_clock.erl b/src/cowboy_clock.erl index c699f4f..e22b718 100644 --- a/src/cowboy_clock.erl +++ b/src/cowboy_clock.erl @@ -64,7 +64,20 @@ rfc2109(LocalTime) -> {{YYYY,MM,DD},{Hour,Min,Sec}} = case calendar:local_time_to_universal_time_dst(LocalTime) of [Gmt] -> Gmt; - [_,Gmt] -> Gmt + [_,Gmt] -> Gmt; + [] -> + %% The localtime generated by cowboy_cookies may fall within + %% the hour that is skipped by daylight savings time. If this + %% is such a localtime, increment the localtime with one hour + %% and try again, if this succeeds, subtracting the max_age + %% from the resulting universaltime and converting to a local + %% time will yield the original localtime. + {Date, {Hour1, Min1, Sec1}} = LocalTime, + LocalTime2 = {Date, {Hour1 + 1, Min1, Sec1}}, + case calendar:local_time_to_universal_time_dst(LocalTime2) of + [Gmt] -> Gmt; + [_,Gmt] -> Gmt + end end, Wday = calendar:day_of_the_week({YYYY,MM,DD}), DayBin = pad_int(DD), -- cgit v1.2.3