Daylight savings and getmtime

Nick Coghlan ncoghlan at iinet.net.au
Sat Jan 29 05:45:47 CET 2005


wittempj at hotmail.com wrote:
> on my windows xp box os.path.getmtime gives back local time (I just
> saved the file):
> 
>>>>os.path.getmtime('c:\\temp\\testset.py')
> 
> 1106955016
> 
>>>>print time.mktime(time.localtime())
> 
> 1106955034.0

No. mktime is converting the local time to UTC. Try this instead:

Py> time.gmtime(os.path.getmtime("c:/devel/mtime_test.txt"))
(2005, 1, 29, 3, 35, 37, 5, 29, 0)

Py> time.localtime(os.path.getmtime("c:/devel/mtime_test.txt"))
(2005, 1, 29, 15, 35, 37, 5, 29, 1)

(This is with my machine set to Sydney time, so that I'm at UTC + 10, with 
daylight savings currently active)

> You can try to figure out if DST is on by comparing time.localtime()
> versus time.gmtime(). In the Western European Timezone there's one hour
> difference in winter and two hours  in summer.

To figure out if DST is currently active, you can use:

Py> import time
Py> time.localtime()
(2005, 1, 29, 14, 29, 26, 5, 29, 0)
Py> time.localtime().tm_isdst
0

Switching to Sydney time (which actually uses DST, unlike Brisbane) gives:

Py> import time
Py> time.localtime().tm_isdst
1

The same trick will work on historical dates, too. For instance, consider a file 
created last winter, when Sydney was NOT on daylight savings:

Py> time.localtime(os.path.getmtime("c:/log.txt"))
(2004, 7, 20, 19, 46, 35, 1, 202, 0)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at email.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.skystorm.net



More information about the Python-list mailing list