def parse_date(datestring):
    """Attepmts to parse an ISO8601 formatted ``datestring``.

    Returns a ``datetime.datetime`` object.
    """
    datestring = str(datestring).strip()

    if not datestring[0].isdigit():
        raise ParseError()

    if 'W' in datestring.upper():
        try:
            datestring = datestring[:-1] + str(int(datestring[-1:]) -1)
        except:
            pass

    for regex, pattern in DATE_FORMATS:
        if regex.match(datestring):
            found = regex.search(datestring).groupdict()
            dt = datetime.utcnow().strptime(found['matched'], pattern)

            if 'fraction' in found and found['fraction'] is not None:
                dt = dt.replace(microsecond=int(found['fraction'][1:]))

            if 'timezone' in found and found['timezone'] is not None:
                dt = dt.replace(tzinfo=Timezone(found.get('timezone', '')))

            return dt

    return parse_time(datestring)
def parse_date ( datestring ) : datestring = str ( datestring ) . strip ( ) if not datestring [ 0 ] . isdigit ( ) : raise ParseError ( ) if 'W' in datestring . upper ( ) : try : datestring = datestring [ : - 1 ] + str ( int ( datestring [ - 1 : ] ) - 1 ) except : pass for regex , pattern in DATE_FORMATS : if regex . match ( datestring ) : found = regex . search ( datestring ) . groupdict ( ) dt = datetime . utcnow ( ) . strptime ( found [ 'matched' ] , pattern ) if 'fraction' in found and found [ 'fraction' ] is not None : dt = dt . replace ( microsecond = int ( found [ 'fraction' ] [ 1 : ] ) ) if 'timezone' in found and found [ 'timezone' ] is not None : dt = dt . replace ( tzinfo = Timezone ( found . get ( 'timezone' , '' ) ) ) return dt return parse_time ( datestring )
Attepmts to parse an ISO8601 formatted ``datestring``.

    Returns a ``datetime.datetime`` object.