def _parse_datetime()

in azure/functions/meta.py [0:0]


    def _parse_datetime(
            cls, datetime_str: Optional[str]) -> Optional[datetime.datetime]:

        if not datetime_str:
            return None

        too_fractional = re.match(
            r'(.*\.\d{6})(\d+)(Z|[\+|-]\d{1,2}:\d{1,2}){0,1}', datetime_str)

        if too_fractional:
            # The supplied value contains seven digits in the
            # fractional second part, whereas Python expects
            # a maxium of six, so strip it.
            # https://github.com/Azure/azure-functions-python-worker/issues/269
            datetime_str = too_fractional.group(1) + (
                too_fractional.group(3) or '')

        # Try parse time
        utc_time, utc_time_error = cls._parse_datetime_utc(datetime_str)
        if not utc_time_error and utc_time:
            return utc_time.replace(tzinfo=datetime.timezone.utc)

        local_time, local_time_error = cls._parse_datetime_local(datetime_str)
        if not local_time_error and local_time:
            return local_time.replace(tzinfo=None)

        # Report error
        if utc_time_error:
            raise utc_time_error
        elif local_time_error:
            raise local_time_error
        else:
            return None