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