X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/30d7af10d208006ea09f32bd006c2cb2556a36ac..bdbbf89c38126a71b17049469e8f976c571b9392:/luatz/parse.lua diff --git a/luatz/parse.lua b/luatz/parse.lua index 2c5f8d3..6feeb29 100644 --- a/luatz/parse.lua +++ b/luatz/parse.lua @@ -5,36 +5,36 @@ local new_timetable = require "luatz.timetable".new -- Return value is not normalised (this preserves a leap second) -- If the timestamp is only partial (i.e. missing "Z" or time offset) then `tz_offset` will be nil -- TODO: Validate components are within their boundarys (e.g. 1 <= month <= 12) -local function rfc_3339 ( str , init ) - local year , month , day , hour , min , sec , patt_end = str:match ( "^(%d%d%d%d)%-(%d%d)%-(%d%d)[Tt](%d%d%.?%d*):(%d%d):(%d%d)()" , init ) +local function rfc_3339(str, init) + local year, month, day, hour, min, sec, patt_end = str:match("^(%d%d%d%d)%-(%d%d)%-(%d%d)[Tt](%d%d%.?%d*):(%d%d):(%d%d)()", init) -- luacheck: ignore 631 if not year then - error ( "Invalid RFC 3339 timestamp" ) + return nil, "Invalid RFC 3339 timestamp" end - year = tonumber ( year ) - month = tonumber ( month ) - day = tonumber ( day ) - hour = tonumber ( hour ) - min = tonumber ( min ) - sec = tonumber ( sec ) + year = tonumber(year, 10) + month = tonumber(month, 10) + day = tonumber(day, 10) + hour = tonumber(hour, 10) + min = tonumber(min, 10) + sec = tonumber(sec, 10) - local tt = new_timetable ( year , month , day , hour , min , sec ) + local tt = new_timetable(year, month, day, hour, min, sec) local tz_offset - if str:match ("^[Zz]" , patt_end ) then + if str:match("^[Zz]", patt_end) then tz_offset = 0 else - local hour_offset , min_offset = str:match ( "^([+-]%d%d):(%d%d)" , patt_end ) + local hour_offset, min_offset = str:match("^([+-]%d%d):(%d%d)", patt_end) if hour_offset then - tz_offset = tonumber ( hour_offset )*60 + tonumber ( min_offset ) - else - -- Invalid RFC 3339 timestamp offset (should be Z or (+/-)hour:min + tz_offset = tonumber(hour_offset, 10) * 3600 + tonumber(min_offset, 10) * 60 + else -- luacheck: ignore 542 + -- Invalid RFC 3339 timestamp offset (should be Z or (+/-)hour:min) -- tz_offset will be nil end end - return tt , tz_offset + return tt, tz_offset end return { - rfc_3339 = rfc_3339 ; + rfc_3339 = rfc_3339; }