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" )


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to