(dt=None, isdst=-1)
return dt.replace(tzinfo=tz)
Return local time as an aware datetime object.

    If called without arguments, return current time.  Otherwise *dt*
    argument should be a datetime instance, and it is converted to the
    local time zone according to the system time zone database.  If *dt* is
    naive (that is, dt.tzinfo is None), it is assumed to be in local time.
    In this case, a positive or zero value for *isdst* causes localtime to
    presume initially that summer time (for example, Daylight Saving Time)
    is or is not (respectively) in effect for the specified time.  A
    negative value for *isdst* causes the localtime() function to attempt
    to divine whether summer time is in effect for the specified time.
Return local time as an aware datetime object.
Return local time as an aware datetime object .
def localtime(dt=None, isdst=-1):
    """Return local time as an aware datetime object.

    If called without arguments, return current time.  Otherwise *dt*
    argument should be a datetime instance, and it is converted to the
    local time zone according to the system time zone database.  If *dt* is
    naive (that is, dt.tzinfo is None), it is assumed to be in local time.
    In this case, a positive or zero value for *isdst* causes localtime to
    presume initially that summer time (for example, Daylight Saving Time)
    is or is not (respectively) in effect for the specified time.  A
    negative value for *isdst* causes the localtime() function to attempt
    to divine whether summer time is in effect for the specified time.

    """
    if dt is None:
        return datetime.datetime.now(datetime.timezone.utc).astimezone()
    if dt.tzinfo is not None:
        return dt.astimezone()
    # We have a naive datetime.  Convert to a (localtime) timetuple and pass to
    # system mktime together with the isdst hint.  System mktime will return
    # seconds since epoch.
    tm = dt.timetuple()[:-1] + (isdst,)
    seconds = time.mktime(tm)
    localtm = time.localtime(seconds)
    try:
        delta = datetime.timedelta(seconds=localtm.tm_gmtoff)
        tz = datetime.timezone(delta, localtm.tm_zone)
    except AttributeError:
        # Compute UTC offset and compare with the value implied by tm_isdst.
        # If the values match, use the zone name implied by tm_isdst.
        delta = dt - datetime.datetime(*time.gmtime(seconds)[:6])
        dst = time.daylight and localtm.tm_isdst > 0
        gmtoff = -(time.altzone if dst else time.timezone)
        if delta == datetime.timedelta(seconds=gmtoff):
            tz = datetime.timezone(delta, time.tzname[dst])
        else:
            tz = datetime.timezone(delta)
    return dt.replace(tzinfo=tz)
def localtime ( dt = None , isdst = - 1 ) : if dt is None : return datetime . datetime . now ( datetime . timezone . utc ) . astimezone ( ) if dt . tzinfo is not None : return dt . astimezone ( ) # We have a naive datetime.  Convert to a (localtime) timetuple and pass to # system mktime together with the isdst hint.  System mktime will return # seconds since epoch. tm = dt . timetuple ( ) [ : - 1 ] + ( isdst , ) seconds = time . mktime ( tm ) localtm = time . localtime ( seconds ) try : delta = datetime . timedelta ( seconds = localtm . tm_gmtoff ) tz = datetime . timezone ( delta , localtm . tm_zone ) except AttributeError : # Compute UTC offset and compare with the value implied by tm_isdst. # If the values match, use the zone name implied by tm_isdst. delta = dt - datetime . datetime ( * time . gmtime ( seconds ) [ : 6 ] ) dst = time . daylight and localtm . tm_isdst > 0 gmtoff = - ( time . altzone if dst else time . timezone ) if delta == datetime . timedelta ( seconds = gmtoff ) : tz = datetime . timezone ( delta , time . tzname [ dst ] ) else : tz = datetime . timezone ( delta ) return dt . replace ( tzinfo = tz )