]> git.madduck.net Git - etc/awesome.git/blobdiff - luatz/tzinfo.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

doc/timetable: Document `normalise` fractional behaviour
[etc/awesome.git] / luatz / tzinfo.lua
index 34b704881ff9739e543ffdb100a3e3ae48aed52b..75be0f11bb5f4eebc95008b3b190becce0524f76 100644 (file)
@@ -1,9 +1,23 @@
 local gettime = require "luatz.gettime".gettime
 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 = {
        __index = tz_info_methods ;
 }
 
 local tz_info_methods = { }
 local tz_info_mt = {
        __index = tz_info_methods ;
 }
+local tt_info_mt = {
+       __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 )
 
 -- Binary search
 local function _find_current ( tzinfo , target , i , j )
@@ -52,15 +66,18 @@ local function find_current_local ( tzinfo , ts_local )
 end
 
 function tz_info_methods:find_current ( current )
 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
 
        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
        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
        local tz1 , tz2 = find_current_local ( self , ts_local )
        tz1 = self [ tz1 ].info
        if tz2 == nil then
@@ -74,4 +91,5 @@ end
 
 return {
        tz_info_mt = tz_info_mt ;
 
 return {
        tz_info_mt = tz_info_mt ;
+       tt_info_mt = tt_info_mt ;
 }
 }