On 2005-04-17, Andrew E <[EMAIL PROTECTED]> wrote: > Uwe Mayer wrote: >> Hi, >> >> I've got a ISO 8601 formatted date-time string which I need to read into a >> datetime object. >> Is there a shorter way than using regular expressions? Is there a sscanf >> function as in C? > > in addition to the other comments... > > I like re, because it gives me the most control. See below. > > > import re > import datetime > > class Converter: > > def __init__( self ): > self.isoPattern = re.compile( "(\d\d\d\d)-(\d\d)-(\d\d)[tT > ](\d\d):(\d\d):(\d\d)" ) > > def iso2date( self, isoDateString ): > match = self.isoPattern.match( isoDateString ) > if not match: raise ValueError( "Not in ISO format: '%s'" % > isoDateString ) > > return datetime.datetime( > int(match.group(1)), > int(match.group(2)), > int(match.group(3)), > int(match.group(4)), > int(match.group(5)), > int(match.group(6)) > ) > > c = Converter() > > > def demo( iso ): > try: > date = c.iso2date( iso ) > print "Input '%s' -> datetime: %s" % ( iso, date ) > except ValueError, e: > print str(e) > > demo( "2005-04-21T12:34:56" ) > demo( "2005-04-21 12:34:57" ) > demo( "2005-04-2 12:34:57" ) > >
That's nice. We should get some code in to the module so that it is simple to round-trip the default datetime timestamps. -- http://mail.python.org/mailman/listinfo/python-list