diff options
author | Magnus Klaar <[email protected]> | 2012-03-09 20:26:06 +0100 |
---|---|---|
committer | Magnus Klaar <[email protected]> | 2012-03-09 20:42:12 +0100 |
commit | 3376b7295e6903d7fb28ba97de5cd72688719fb7 (patch) | |
tree | 95b703c27c508a29c998243212f99cbe57dd5a24 | |
parent | c6c2b31695b6ee5a5d8b10e8b4c34baf510f8f25 (diff) | |
download | cowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.tar.gz cowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.tar.bz2 cowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.zip |
Fix issue #157 relating to daylight savings time.
-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), |