Creates a timezone instance from a string, Timezone, TimezoneInfo or integer offset.
(
obj: str | float | _datetime.tzinfo | Timezone | FixedTimezone | None,
dt: _datetime.datetime | None = None,
)
| 85 | |
| 86 | |
| 87 | def _safe_timezone( |
| 88 | obj: str | float | _datetime.tzinfo | Timezone | FixedTimezone | None, |
| 89 | dt: _datetime.datetime | None = None, |
| 90 | ) -> Timezone | FixedTimezone: |
| 91 | """ |
| 92 | Creates a timezone instance |
| 93 | from a string, Timezone, TimezoneInfo or integer offset. |
| 94 | """ |
| 95 | if isinstance(obj, (Timezone, FixedTimezone)): |
| 96 | return obj |
| 97 | |
| 98 | if obj is None or obj == "local": |
| 99 | return local_timezone() |
| 100 | |
| 101 | if isinstance(obj, (int, float)): |
| 102 | obj = int(obj * 60 * 60) |
| 103 | elif isinstance(obj, _datetime.tzinfo): |
| 104 | # zoneinfo |
| 105 | if hasattr(obj, "key"): |
| 106 | obj = obj.key |
| 107 | # pytz |
| 108 | elif hasattr(obj, "localize"): |
| 109 | obj = obj.zone # type: ignore[attr-defined] |
| 110 | elif obj.tzname(None) == "UTC": |
| 111 | return UTC |
| 112 | else: |
| 113 | offset = obj.utcoffset(dt) |
| 114 | |
| 115 | if offset is None: |
| 116 | offset = _datetime.timedelta(0) |
| 117 | |
| 118 | obj = int(offset.total_seconds()) |
| 119 | |
| 120 | obj = cast("Union[str, int]", obj) |
| 121 | |
| 122 | return timezone(obj) |
| 123 | |
| 124 | |
| 125 | # Public API |
searching dependent graphs…