diff options
-rw-r--r-- | src/cowboy_clock.erl | 15 |
1 files changed, 14 insertions, 1 deletions
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), |