aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jlib.erl4
-rw-r--r--src/mod_time.erl13
2 files changed, 7 insertions, 10 deletions
diff --git a/src/jlib.erl b/src/jlib.erl
index 4adf8879e..cb70c5a4a 100644
--- a/src/jlib.erl
+++ b/src/jlib.erl
@@ -561,7 +561,7 @@ rsm_encode_count(Count, Arr)->
i2l(I) when is_integer(I) -> integer_to_list(I);
i2l(L) when is_list(L) -> L.
-%% Timezone = utc | {Hours, Minutes}
+%% Timezone = utc | {Sign::string(), {Hours, Minutes}} | {Hours, Minutes}
%% Hours = integer()
%% Minutes = integer()
timestamp_to_iso({{Year, Month, Day}, {Hour, Minute, Second}}, Timezone) ->
@@ -572,6 +572,8 @@ timestamp_to_iso({{Year, Month, Day}, {Hour, Minute, Second}}, Timezone) ->
Timezone_string =
case Timezone of
utc -> "Z";
+ {Sign, {TZh, TZm}} ->
+ io_lib:format("~s~2..0w:~2..0w", [Sign, TZh, TZm]);
{TZh, TZm} ->
Sign = case TZh >= 0 of
true -> "+";
diff --git a/src/mod_time.erl b/src/mod_time.erl
index e96c0ea72..52c52502a 100644
--- a/src/mod_time.erl
+++ b/src/mod_time.erl
@@ -76,14 +76,8 @@ process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
{UTC, UTC_diff} = jlib:timestamp_to_iso(Now_universal, utc),
Seconds_diff = calendar:datetime_to_gregorian_seconds(Now_local)
- calendar:datetime_to_gregorian_seconds(Now_universal),
- {Hd, Md, _} = case Seconds_diff >= 0 of
- true ->
- calendar:seconds_to_time(Seconds_diff);
- false ->
- {Hd0, Md0, Sd0} = calendar:seconds_to_time(-Seconds_diff),
- {-Hd0, Md0, Sd0}
- end,
- {_, TZO_diff} = jlib:timestamp_to_iso({{0, 0, 0}, {0, 0, 0}}, {Hd, Md}),
+ {Hd, Md, _} = calendar:seconds_to_time(abs(Seconds_diff)),
+ {_, TZO_diff} = jlib:timestamp_to_iso({{0, 0, 0}, {0, 0, 0}}, {sign(Seconds_diff), {Hd, Md}}),
IQ#iq{type = result,
sub_el = [{xmlelement, "time",
[{"xmlns", ?NS_TIME}],
@@ -93,4 +87,5 @@ process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
[{xmlcdata, UTC ++ UTC_diff}]}]}]}
end.
-
+sign(N) when N < 0 -> "-";
+sign(_) -> "+".