diff options
Diffstat (limited to 'src/cowboy_clock.erl')
-rw-r--r-- | src/cowboy_clock.erl | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/src/cowboy_clock.erl b/src/cowboy_clock.erl index f851211..b439bb1 100644 --- a/src/cowboy_clock.erl +++ b/src/cowboy_clock.erl @@ -76,39 +76,12 @@ rfc1123(DateTime) -> %% This format is used in the <em>set-cookie</em> header sent with %% HTTP responses. -spec rfc2109(calendar:datetime()) -> binary(). -rfc2109(LocalTime) -> - {{YYYY,MM,DD},{Hour,Min,Sec}} = - case calendar:local_time_to_universal_time_dst(LocalTime) of - [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), - YearBin = list_to_binary(integer_to_list(YYYY)), - HourBin = pad_int(Hour), - MinBin = pad_int(Min), - SecBin = pad_int(Sec), - WeekDay = weekday(Wday), - Month = month(MM), - <<WeekDay/binary, ", ", - DayBin/binary, " ", Month/binary, " ", - YearBin/binary, " ", - HourBin/binary, ":", - MinBin/binary, ":", - SecBin/binary, " GMT">>. +rfc2109({Date = {Y, Mo, D}, {H, Mi, S}}) -> + Wday = calendar:day_of_the_week(Date), + << (weekday(Wday))/binary, ", ", (pad_int(D))/binary, "-", + (month(Mo))/binary, "-", (list_to_binary(integer_to_list(Y)))/binary, + " ", (pad_int(H))/binary, $:, (pad_int(Mi))/binary, + $:, (pad_int(S))/binary, " GMT" >>. %% gen_server. @@ -219,6 +192,13 @@ month(12) -> <<"Dec">>. -ifdef(TEST). +rfc2109_test_() -> + Tests = [ + {<<"Sat, 14-May-2011 14:25:33 GMT">>, {{2011, 5, 14}, {14, 25, 33}}}, + {<<"Sun, 01-Jan-2012 00:00:00 GMT">>, {{2012, 1, 1}, { 0, 0, 0}}} + ], + [{R, fun() -> R = rfc2109(D) end} || {R, D} <- Tests]. + update_rfc1123_test_() -> Tests = [ {<<"Sat, 14 May 2011 14:25:33 GMT">>, undefined, |