En Mon, 14 Jul 2008 12:06:30 -0300, Keith Hughitt <[EMAIL PROTECTED]> escribió:
On Jul 12, 12:52 am, "Gabriel Genellina" <[EMAIL PROTECTED]>
wrote:
En Fri, 11 Jul 2008 15:42:37 -0300, Keith Hughitt  
<[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 ---
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

Reply via email to