X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/e5c87b4489b0881b7b9903733478f0d11ac96ab7..f36aa3f1cc01b596038530abf77fcdb29ba5acfc:/luatz/tzinfo.lua?ds=sidebyside diff --git a/luatz/tzinfo.lua b/luatz/tzinfo.lua index 34b7048..3ff0a07 100644 --- a/luatz/tzinfo.lua +++ b/luatz/tzinfo.lua @@ -1,9 +1,25 @@ local gettime = require "luatz.gettime".gettime +local timetable_mt = require "luatz.timetable".timetable_mt + +local function to_timestamp ( o ) + if type ( o ) == "number" then + return o + elseif getmetatable ( o ) == timetable_mt then + return o:timestamp ( ) + end +end local tz_info_methods = { } local tz_info_mt = { + __name = "luatz.tz_info"; __index = tz_info_methods ; } +local tt_info_mt = { + __name = "luatz.tt_info"; + __tostring = function ( self ) + return string.format ( "tt_info:%s=%d" , self.abbr , self.gmtoff ) + end ; +} -- Binary search local function _find_current ( tzinfo , target , i , j ) @@ -52,15 +68,18 @@ local function find_current_local ( tzinfo , ts_local ) end function tz_info_methods:find_current ( current ) + current = assert ( to_timestamp ( current ) , "invalid timestamp to :find_current" ) return self [ _find_current ( self , current , 0 , #self ) ].info end -function tz_info_methods:localize ( utc_ts ) +function tz_info_methods:localise ( utc_ts ) utc_ts = utc_ts or gettime ( ) return utc_ts + self:find_current ( utc_ts ).gmtoff end +tz_info_methods.localize = tz_info_methods.localise -function tz_info_methods:utctime ( ts_local , is_dst ) +function tz_info_methods:utctime ( ts_local ) + ts_local = assert ( to_timestamp ( ts_local ) , "invalid timestamp to :utctime" ) local tz1 , tz2 = find_current_local ( self , ts_local ) tz1 = self [ tz1 ].info if tz2 == nil then @@ -74,4 +93,5 @@ end return { tz_info_mt = tz_info_mt ; + tt_info_mt = tt_info_mt ; }