I took a slightly different approach for a Time class I did for Grunt (the source code is available at luaforge). I converted the Windows FileTime format to a double (floating point) number scaled to days and fractions of a day. The number is actually stored as GMT (UTC if you want to be pedantic!) and converted to and from local time in the accessors. This has advantages: there are no discontinuity issues (which famously plague the UNIX system). Negative numbers can be used to represent dates prior to the datum and moving arbitrarily far from the datum you just loose resolution rather than running into a brick wall like you do with integers. With 64 bit floats the loss of resolution is not really significant over reasonable time scales (Windows may record time to 100-nanosecond resolution, but I do not believe the accuracy is anything like that!). Although I use a double in a userdata, of course this is the same as the default Lua number and could be represented as such. -----Original Message----- From: lua-bounces@bazar2.conectiva.com.br [mailto:lua-bounces@bazar2.conectiva.com.br] On Behalf Of KHMan Sent: 05 May 2009 04:19 To: Lua list Subject: Re: os.time epoch on Windows Vaughan McAlley wrote: > Thanks for the help. It's nice to know I can use the Lua timestamps > and they won't be translating as 1639 on Windows clients. The closest > thing to the Unix time-stamp on Windows seems to be FileTime, a 64-bit > integer counting 100-nanosecond intervals from 1601, which wouldn't > work with Lua numbers. When you want to view a FileTime as a sane local time, you'd have to make another two calls to FileTimeToLocalFileTime and FileTimeToSystemTime, the result of the latter can then be loaded into a Lua table. IIRC, in Cygwin, they subtract a FileTime by a big number to get to the Unix epoch, then scale accordingly. In most cases it is easier to use the C library, but sometimes it is necessary to write your own file system layer, e.g. to use Unicode filenames in Win32. >> Thu Jan 1 00:00:01 1970 > [snip] -- Cheers, Kein-Hong Man (esq.) Kuala Lumpur, Malaysia
Attachment:
smime.p7s
Description: S/MIME cryptographic signature