Thanks Gabriel! That helps clear things up for me. The above method works very well. I only have one remaining question: How can I pass a datetime object to MySQL?'
So far, what I've been doing is building the query as a string, for example: query = "INSERT INTO image VALUES(%d, %d, %s, '%s')" % (id, meas, date, 'jpg') cursor.execute(query) This works fine for regular datetime objects, which are passed as strings similar to: "2003-10-01 00:00:00." When incorporating a timezone, however, the resulting string is of the form "2003-10-01 00:00:00+00:00." Unfortunately, MySQL does not recognize the offset. I know you said you don't use MySQL, but how would you do something execute a similar query on the database you normally interface with? Thanks, Keith On Jul 15, 12:04 am, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Mon, 14 Jul 2008 12:06:30 -0300,KeithHughitt > <[EMAIL PROTECTED]> escribió: > > > > > On Jul 12, 12:52 am, "Gabriel Genellina" <[EMAIL PROTECTED]> > > wrote: > >> En Fri, 11 Jul 2008 15:42:37 -0300,KeithHughitt > >> <[EMAIL PROTECTED]> escribió: > > >> > I am having a little trouble figuring out how to convert a python > >> > datetime to UTC. I have a UTC date (e.g. 2008-07-11 00:00:00). I would > >> > like to create a UTC date so that when I send it to MySQL (which > >> > treats all dates at local dates by default), it will already have > >> > incorporated the proper UTC offset. I've tried looking through the > >> > docshttp://python.active-venture.com/lib/datetime-datetime.html), but > >> > have not had any luck. > > >> You have to use a "timezone aware" datetime object. If all you want is > >> to > >> store an UTC date, the tzinfo demo classes that you can find in the > >> Python > >> docs at <http://docs.python.org/lib/datetime-tzinfo.html> may be enough. > > > Thanks for advice Gabriel. I downloaded the tzinfo demo class, saved > > it as > > UTC.py and imported it. I'm still not exactly sure how to use it > > though. It looks like > > the file already creates an instance of the UTC tzinfo class (line 20: > > "utc = UTC()"), > > however, when I try to test it out in the interpreter, it cannot be > > found. I'm new > > to python, and there is probably something obvious I'm missing, but do > > you have any ideas? > > The import statement in Python doesn't behave the same way as similar > statements in other languages - and it may be confusing you. I'll try to > explain it using this example. > You have: > - a *file* UTC.py, containing the source code for the *module* UTC. It > contains: > - a *class* definition (UTC) and > - an *instance* of that class, utc. > > --- begin UTC.py ---If you pass a "timezone aware" datetime object as a SQL > parameter > class UTC(tzinfo): > ... > utc = UTC() > ... > --- end UTC.py --- > > > Here is what I'm attempting: > > > ============ output begin ============= > > > Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42) > > [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 > > Type "help", "copyright", "credits" or "license" for more information. > >>>> import datetime, UTC > > Here you have imported the *module* UTC. That is, the name UTC now refers > to a newly created module just loaded from the UTC.py file. > > >>>> t = datetime.datetime(2008, 7, 14, 00, 00, 00, UTC()) > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > TypeError: 'module' object is not callable > > The error comes from UTC(): UTC is a module, UTC() is attempting to "call" > it, and since modules are not callable objects, we get a TypeError. > > >>>> utc > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > NameError: name 'utc' is not defined > > The *only* name we have imported so far is UTC - the module. Lowercase utc > isn't defined. > > >>>> utc = UTC() > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > TypeError: 'module' object is not callable > > Same as above... > > Ok, how to solve it? We know that UTC refers to the *module* with the same > name. To get the *class* inside that module, use UTC.UTC - try again in > the interpreter. To create a new instance of that class, you can use > UTC.UTC(). To obtain the instance already created in the UTC module, use > UTC.utc > > **OR** > > Import those names explicitely: > > py> from UTC import UTC > > In this case the name UTC refers to the *class* inside the module. > In this particular example it may be confusing - both have the same name. > Another example from the standard library: the poplib module contains a > POP3 class, so after executing this line: > > py> from poplib import POP3 > > the name POP3 refers to that class. The poplib module itself isn't > directly available. > Back to the UTC module, you could use: > > py> from UTC import utc > > and now utc refers to the *instance* already created inside the module. > This last form may be the most convenient in your case: > > py> import datetime > py> from UTC import utc > py> print datetime.datetime(2008, 7, 14, 20, 30, 0, 0, utc) > 2008-07-14 20:30:00+00:00 > > -- > Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list