import pytz


def make_aware(date,zone='Europe/Berlin',force=False):
    """
        convert a date into a zone aware date

        Args:
            zone [string]: the string descriptor for the zone (https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568)
            force [bool]: if force is set, we se the zone of the date to zone
                            if force is false we don't set the zone of dates that have a zone already
        Returns:
            a date zone aware datetime objec
    """

    tz = pytz.timezone(zone)

    if date.tzinfo is not None and date.tzinfo.utcoffset(date) is not None:
        #is aware already,
        if force:
            date = date.astimezone(tz)
    else:
        tz.localize(date)
        date = date.astimezone(tz)
    return date