Time Zones, Python and the Nokia N70

From rukapedia
Jump to: navigation, search

Since I started hacking with Python my Nokia N70 mobile phone, I've been confused by how it handles (or doesn't handle) time zones and daylight savings time. This page is an attempt to document what it actually supports and when.

My Problem

I want to be able to sync the clock in my Nokia N70 with the GPS time returned by my GPSlim 236 Bluetooth GPS. The GPS time is always returned as GMT/UTC, regardless of the time of year (i.e. daylight savings time or not).

To be able to properly set the phone's clock, I need to be able to tell the difference between GMT and local time so as to be able to convert the value I receive from my GPS into local time.

Summary

A limitation of Python on the Nokia N70 is that the time returned by gmtime() isn't time-zone aware. The Python documentation says that the function should "Convert a time expressed in seconds since the epoch to a struct_time in UTC in which the dst flag is always zero", however the value returned actually changes when the phone's daylight savings time value is changed, which shouldn't happen.

As a result of this limitation -- and because there's no way to access the local time zone setting from Python -- there's no way to determine what the proper GMT/UTC to local time conversion should be.

Time at GMT, Daylight Savings Time OFF

At 20:00 GMT, I set the current city to London, United Kingdom, but left Daylight Savings Time off. The phone shows 20:00 --

Clock1.jpg

And Python returns 20:00 for both gmtime() and localtime():

>>> time.localtime()
(2006, 7, 14, 20, 0, 0, 4, 195, -1)
>>> time.gmtime()
(2006, 7, 14, 20, 0, 0, 4, 195, -1)

Result: GMT is correct, local time one hour early.

Time at GMT, Daylight Savings Time ON

At 20:09 GMT, I set the current city to London, United Kingdom, and turned Daylight Savings Time on. The phone shows 21:09 --

Clock2.jpg

And Python returns 21:09 for both gmtime() and localtime():

>>> time.localtime()
(2006, 7, 14, 21, 9, 0, 4, 195, -1)
>>> time.gmtime()
(2006, 7, 14, 21, 9, 0, 4, 195, -1)

Result: GMT is one hour ahead, local time is correct

Time at GMT-4, Daylight Savings Time OFF

At 20:12 GMT, I set the current city to Halifax, Nova Scotia (GMT-4), but left Daylight Savings Time off. The phone shows 16:12 --

Clock3.jpg

And Python returns 16:12 for localtime() and 20:12 for gmtime():

>>> time.localtime()
(2006, 7, 14, 16, 12, 0, 4, 195, -1)
>>> time.gmtime()
(2006, 7, 14, 20, 12, 0, 4, 195, -1)

Result: GMT is correct, local time one hour early.

Time at GMT-4, Daylight Savings Time ON

At 20:18 GMT, I set the current city to Halifax, Nova Scotia (GMT-4), and turned Daylight Savings Time on. The phone shows 17:18 --

Clock4.jpg

And Python returns 17:18 for localtime() and 21:18 for gmtime():

>>> time.localtime()
(2006, 7, 14, 17, 18, 0, 4, 195, -1)
>>> time.gmtime()
(2006, 7, 14, 21, 18, 0, 4, 195, -1)

Result: GMT is one hour ahead, local time is correct