Search code examples
pythondatetimetimezonepytz

How can I check by type if an object is instance of pytz.timezone?


I want something like this:

from datetime import datetime, timezone
import pytz

def convert_datetime_by_timezone(timestamp_dt, to_timezone):

    if isinstance(to_timezone, str):
        return timestamp_dt.astimezone(pytz.timezone(to_timezone))

    elif isinstance(to_timezone, pytz.tzinfo.??????):
        return timestamp_dt.astimezone(to_timezone)

    else:
        raise Exception("Invalid timezone: '%s'" % str(to_timezone))

But each time I create a pytz timezone a new type of object gets created:

>>> type(pytz.timezone("UTC"))
<class 'pytz.UTC'>
>>> type(pytz.timezone("Europe/Budapest"))
<class 'pytz.tzfile.Europe/Budapest'>

What is the correct way to check this?


Solution

  • isinstance(x, pytz.BaseTzInfo) works for both cases