diff options
author | Kim Alvefur <zash@zash.se> | 2018-12-09 23:01:47 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-12-09 23:01:47 +0100 |
commit | 7ea9d0c6fcea9cd196eba46e3300e4deba660201 (patch) | |
tree | 9f543bb3fed58d6e6b3f33c18a2c407a375d8b2b | |
parent | 705da02b4b21aa4da891aaaeeaf85a02c82db3ab (diff) | |
download | prosody-7ea9d0c6fcea9cd196eba46e3300e4deba660201.tar.gz prosody-7ea9d0c6fcea9cd196eba46e3300e4deba660201.zip |
util.datetime: Make sure timezone difference is calculated correctly (fixes #1262)
If the two os.date() calls happen at either side of a second ticking
over there would be a one second error in the calculation.
-rw-r--r-- | util/datetime.lua | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/util/datetime.lua b/util/datetime.lua index 06be9fc2..2d27ece4 100644 --- a/util/datetime.lua +++ b/util/datetime.lua @@ -38,7 +38,8 @@ local function parse(s) local year, month, day, hour, min, sec, tzd; year, month, day, hour, min, sec, tzd = s:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-]?.*)$"); if year then - local time_offset = os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone + local now = os_time(); + local time_offset = os_difftime(os_time(os_date("*t", now)), os_time(os_date("!*t", now))); -- to deal with local timezone local tzd_offset = 0; if tzd ~= "" and tzd ~= "Z" then local sign, h, m = tzd:match("([+%-])(%d%d):?(%d*)"); |