X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=datetime_utils.py;fp=datetime_utils.py;h=7c5516b594b314aed141b4494e7eed5b820770f3;hb=7e6972bc7c8e891dc669645fa5969ed76fe38314;hp=310ffe154d116348fa65e4c707a421c3c6721de0;hpb=ed47f1a0c31184280a303563237e34c0e53437d7;p=python_utils.git diff --git a/datetime_utils.py b/datetime_utils.py index 310ffe1..7c5516b 100644 --- a/datetime_utils.py +++ b/datetime_utils.py @@ -62,6 +62,24 @@ def replace_timezone(dt: datetime.datetime, ) +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: """ @@ -115,6 +133,42 @@ def date_to_datetime(date: datetime.date) -> datetime.datetime: ) +def time_to_datetime_today(time: datetime.time) -> datetime.datetime: + """ + Given a time, returns that time as a datetime with a date component + set based on the current date. If the time passed is timezone aware, + the resulting datetime will also be (and will use the same tzinfo). + If the time is timezone naive, the datetime returned will be too. + + >>> t = datetime.time(13, 14, 0) + >>> d = now_pacific().date() + >>> dt = time_to_datetime_today(t) + >>> dt.date() == d + True + + >>> dt.time() == t + True + + >>> dt.tzinfo == t.tzinfo + True + + >>> dt.tzinfo == None + True + + >>> t = datetime.time(8, 15, 12, 0, pytz.UTC) + >>> t.tzinfo == None + False + + >>> dt = time_to_datetime_today(t) + >>> dt.tzinfo == None + False + + """ + now = now_pacific() + tz = time.tzinfo + return datetime.datetime.combine(now, time, tz) + + def date_and_time_to_datetime(date: datetime.date, time: datetime.time) -> datetime.datetime: """