from datetime import datetime, date, time from dateutil.tz import gettz from tzlocal import get_localzone_name def ensure_localisation(dt, timezone=get_localzone_name()): """Insures localisation with provided timezone on "datetime" object. Does nothing to object of type "date".""" if isinstance(dt, datetime): if dt.tzinfo is None: tz = gettz(timezone) dt = dt.replace(tzinfo=tz) return dt elif isinstance(dt, date): return dt else: raise TypeError('"date" or "datetime" object expected, not {!r}.'.format(dt.__class__.__name__)) def to_localized_iso(dt, timezone=get_localzone_name()): if not isinstance(dt, datetime): dt = datetime.combine(dt, time()) return ensure_localisation(dt, timezone).isoformat()