[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"
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.
> 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>.
> 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')
Dale Strickland-Clark wrote: > 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
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.