from datetime import datetime, timezone, timedelta import time EPOCH = datetime(1970, 1, 1) def localtime(utctime=None): if utctime is None: tm = time.localtime() else: seconds = (utctime - EPOCH).total_seconds() tm = time.localtime(seconds) tz = (timezone(timedelta(seconds=-time.altzone), time.tzname[1]) if tm.tm_isdst else timezone(timedelta(seconds=-time.timezone), time.tzname[0])) return datetime(*tm[:6], tzinfo=tz) if __name__ == '__main__': for t in [localtime(), localtime(datetime.utcnow()), localtime(datetime.utcfromtimestamp(0))]: print(t.tzname(), t, t.timetuple().tm_isdst)