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.
This commit is contained in:
Kim Alvefur 2018-12-09 23:01:47 +01:00
parent 76536dab05
commit 968eaf41a8

View file

@ -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*)");