Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

datetime module: iso date *input* needed

2 views
Skip to first unread message

george young

unread,
Jan 30, 2003, 6:17:27 PM1/30/03
to
[python 2.3a1, linux]
I'm using the 2.3a datetime module. The datetime.isoformat() works nicely:
>>> import datetime
>>> d=datetime.datetime.now()
>>> d
datetime.datetime(2003, 1, 30, 17, 48, 7, 848769)
>> d.isoformat()
'2003-01-30T17:48:07.848769'

but now I need a way to make a datetime object from a date in iso format.
I can't find a function in datetime to do this, e.g. something like:
d=datetime.datetime.parse_iso('2003-01-30T17:48:07.848769')

I thought about using the time module strptime function, but it doesn't do
fractions of a second. I used to move date/times between python and postgres as
epoch integers, but I hope to change to a human-readable format for better
debugging.

I'm sure I could do this somehow with mx.DateTime, but if the datetime module
is going to be the new standard, I would like to use it in my new code...

-- George
--
I cannot think why the whole bed of the ocean is
not one solid mass of oysters, so prolific they seem. Ah,
I am wandering! Strange how the brain controls the brain!
-- Sherlock Holmes in "The Dying Detective"

Dale Strickland-Clark

unread,
Jan 30, 2003, 6:51:40 PM1/30/03
to
george young <g...@ll.mit.edu> wrote:

>[python 2.3a1, linux]
>I'm using the 2.3a datetime module. The datetime.isoformat() works nicely:
> >>> import datetime
> >>> d=datetime.datetime.now()
> >>> d
> datetime.datetime(2003, 1, 30, 17, 48, 7, 848769)
> >> d.isoformat()
> '2003-01-30T17:48:07.848769'
>
>but now I need a way to make a datetime object from a date in iso format.
>I can't find a function in datetime to do this, e.g. something like:
> d=datetime.datetime.parse_iso('2003-01-30T17:48:07.848769')
>
>I thought about using the time module strptime function, but it doesn't do
>fractions of a second. I used to move date/times between python and postgres as
>epoch integers, but I hope to change to a human-readable format for better
>debugging.
>
>I'm sure I could do this somehow with mx.DateTime, but if the datetime module
>is going to be the new standard, I would like to use it in my new code...
>
>-- George

A bit of a sledgehammer but what about:

>>> import re
>>> t = '2003-01-30T17:48:07.848769'
>>> p = re.compile('[.:T-]')
>>> isobits = [int(s) for s in p.split(t)]
>>> isobits
[2003, 1, 30, 17, 48, 7, 848769]
>>> apply(datetime.datetime, isobits)

I assume this will work but I don't have 2.3a installed so no datetime
module to play with.

--
Dale Strickland-Clark
Riverhall Systems Ltd

Tim Peters

unread,
Jan 30, 2003, 11:30:29 PM1/30/03
to
[george young]

> I'm using the 2.3a datetime module. The datetime.isoformat()
> works nicely:
> >>> import datetime
> >>> d=datetime.datetime.now()
> >>> d
> datetime.datetime(2003, 1, 30, 17, 48, 7, 848769)
> >> d.isoformat()
> '2003-01-30T17:48:07.848769'
>
> but now I need a way to make a datetime object from a date in iso format.
> I can't find a function in datetime to do this, e.g. something like:
> d=datetime.datetime.parse_iso('2003-01-30T17:48:07.848769')

You can stop looking: datetime doesn't support any kind of conversion from
string. The number of bottomless pits in any datetime module is unbounded,
and Guido declared this particular pit out-of-bounds at the start so that
there was a fighting chance to get *anything* done for 2.3.

> I thought about using the time module strptime function, but it doesn't
> do fractions of a second.

As above. You'll have to parse it yourself for now, but part of the point
of the ISO format is that it's dead easy to parse. The only irregularities
are that the fractional-seconds and UTC offset portions are optional. A
simple regexp can handle all variations easily -- and I never put "simple"
next to "regexp" to be cruel <wink>.


Paul Boddie

unread,
Jan 31, 2003, 6:26:19 AM1/31/03
to
george young <g...@ll.mit.edu> wrote in message news:<2003013018172...@ll.mit.edu>...

>
> but now I need a way to make a datetime object from a date in iso format.
> I can't find a function in datetime to do this, e.g. something like:
> d=datetime.datetime.parse_iso('2003-01-30T17:48:07.848769')

http://www.mnot.net/python/isodate.py

Andrew Henshaw

unread,
Jan 31, 2003, 10:41:05 PM1/31/03
to
Dale Strickland-Clark wrote:

Wouldn't you have ambiguities with the fractional portion (e.g..0848 and
.848)? Perhaps it would be best to leave the seconds in floating-point
format.

Andy


0 new messages