(doc, json_options)
return bson._millis_to_datetime(int(dtm), json_options)
Decode a JSON datetime to python datetime.datetime.
Decode a JSON datetime to python datetime.datetime.
Decode a JSON datetime to python datetime . datetime .
def _parse_canonical_datetime(doc, json_options):
    """Decode a JSON datetime to python datetime.datetime."""
    dtm = doc["$date"]
    if len(doc) != 1:
        raise TypeError('Bad $date, extra field(s): %s' % (doc,))
    # mongoexport 2.6 and newer
    if isinstance(dtm, string_type):
        # Parse offset
        if dtm[-1] == 'Z':
            dt = dtm[:-1]
            offset = 'Z'
        elif dtm[-3] == ':':
            # (+|-)HH:MM
            dt = dtm[:-6]
            offset = dtm[-6:]
        elif dtm[-5] in ('+', '-'):
            # (+|-)HHMM
            dt = dtm[:-5]
            offset = dtm[-5:]
        elif dtm[-3] in ('+', '-'):
            # (+|-)HH
            dt = dtm[:-3]
            offset = dtm[-3:]
        else:
            dt = dtm
            offset = ''

        # Parse the optional factional seconds portion.
        dot_index = dt.rfind('.')
        microsecond = 0
        if dot_index != -1:
            microsecond = int(float(dt[dot_index:]) * 1000000)
            dt = dt[:dot_index]

        aware = datetime.datetime.strptime(
            dt, "%Y-%m-%dT%H:%M:%S").replace(microsecond=microsecond,
                                             tzinfo=utc)

        if offset and offset != 'Z':
            if len(offset) == 6:
                hours, minutes = offset[1:].split(':')
                secs = (int(hours) * 3600 + int(minutes) * 60)
            elif len(offset) == 5:
                secs = (int(offset[1:3]) * 3600 + int(offset[3:]) * 60)
            elif len(offset) == 3:
                secs = int(offset[1:3]) * 3600
            if offset[0] == "-":
                secs *= -1
            aware = aware - datetime.timedelta(seconds=secs)

        if json_options.tz_aware:
            if json_options.tzinfo:
                aware = aware.astimezone(json_options.tzinfo)
            return aware
        else:
            return aware.replace(tzinfo=None)
    return bson._millis_to_datetime(int(dtm), json_options)
def _parse_canonical_datetime ( doc , json_options ) : dtm = doc [ "$date" ] if len ( doc ) != 1 : raise TypeError ( 'Bad $date, extra field(s): %s' % ( doc , ) ) # mongoexport 2.6 and newer if isinstance ( dtm , string_type ) : # Parse offset if dtm [ - 1 ] == 'Z' : dt = dtm [ : - 1 ] offset = 'Z' elif dtm [ - 3 ] == ':' : # (+|-)HH:MM dt = dtm [ : - 6 ] offset = dtm [ - 6 : ] elif dtm [ - 5 ] in ( '+' , '-' ) : # (+|-)HHMM dt = dtm [ : - 5 ] offset = dtm [ - 5 : ] elif dtm [ - 3 ] in ( '+' , '-' ) : # (+|-)HH dt = dtm [ : - 3 ] offset = dtm [ - 3 : ] else : dt = dtm offset = '' # Parse the optional factional seconds portion. dot_index = dt . rfind ( '.' ) microsecond = 0 if dot_index != - 1 : microsecond = int ( float ( dt [ dot_index : ] ) * 1000000 ) dt = dt [ : dot_index ] aware = datetime . datetime . strptime ( dt , "%Y-%m-%dT%H:%M:%S" ) . replace ( microsecond = microsecond , tzinfo = utc ) if offset and offset != 'Z' : if len ( offset ) == 6 : hours , minutes = offset [ 1 : ] . split ( ':' ) secs = ( int ( hours ) * 3600 + int ( minutes ) * 60 ) elif len ( offset ) == 5 : secs = ( int ( offset [ 1 : 3 ] ) * 3600 + int ( offset [ 3 : ] ) * 60 ) elif len ( offset ) == 3 : secs = int ( offset [ 1 : 3 ] ) * 3600 if offset [ 0 ] == "-" : secs *= - 1 aware = aware - datetime . timedelta ( seconds = secs ) if json_options . tz_aware : if json_options . tzinfo : aware = aware . astimezone ( json_options . tzinfo ) return aware else : return aware . replace ( tzinfo = None ) return bson . _millis_to_datetime ( int ( dtm ) , json_options )