+ >>> o.hour == h
+ True
+
+ """
+ return datetime.datetime(
+ dt.year,
+ dt.month,
+ dt.day,
+ dt.hour,
+ dt.minute,
+ dt.second,
+ dt.microsecond,
+ tzinfo=tz,
+ )
+
+
+def replace_time_timezone(t: datetime.time, tz: datetime.tzinfo) -> datetime.time:
+ """
+ Replaces the timezone on a datetime.time directly without performing
+ any translation.
+
+ >>> t = datetime.time(8, 15, 12, 0, pytz.UTC)
+ >>> t.tzname()
+ 'UTC'
+
+ >>> t = replace_time_timezone(t, pytz.timezone('US/Pacific'))
+ >>> t.tzname()
+ 'US/Pacific'
+
+ """
+ return t.replace(tzinfo=tz)
+
+
+def translate_timezone(dt: datetime.datetime, tz: datetime.tzinfo) -> datetime.datetime:
+ """
+ Translates dt into a different timezone by adjusting the year, month,
+ day, hour, minute, second, micro, etc... appropriately. The returned
+ dt is the same instant in another timezone.
+
+ >>> from pytz import UTC
+ >>> d = now_pacific()
+ >>> d.tzinfo.tzname(d)[0] # Note: could be PST or PDT
+ 'P'
+ >>> h = d.hour
+ >>> o = translate_timezone(d, UTC)
+ >>> o.tzinfo.tzname(o)
+ 'UTC'
+ >>> o.hour == h
+ False