aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_clock.erl
diff options
context:
space:
mode:
authorMagnus Klaar <[email protected]>2012-03-09 20:26:06 +0100
committerMagnus Klaar <[email protected]>2012-03-09 20:42:12 +0100
commit3376b7295e6903d7fb28ba97de5cd72688719fb7 (patch)
tree95b703c27c508a29c998243212f99cbe57dd5a24 /src/cowboy_clock.erl
parentc6c2b31695b6ee5a5d8b10e8b4c34baf510f8f25 (diff)
downloadcowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.tar.gz
cowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.tar.bz2
cowboy-3376b7295e6903d7fb28ba97de5cd72688719fb7.zip
Fix issue #157 relating to daylight savings time.
Diffstat (limited to 'src/cowboy_clock.erl')
-rw-r--r--src/cowboy_clock.erl15
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),