import time
from datetime import datetime, timezone
import pytz
[docs]
def convert_utc_datetime_to_est_timezone_aware_datetime(utc_datetime: datetime) -> datetime:
"""
Converts a provided UTC datetime object into an EST timezone aware/normalized datetime object in Zulu notation.
.. todo:: Finish docstrings.
"""
est_datetime: datetime
est = pytz.timezone("US/Eastern")
est_datetime = est.normalize(utc_datetime.astimezone(est))
return est_datetime
[docs]
def convert_est_datetime_to_aware_utc_datetime(est_datetime: datetime) -> datetime:
"""
.. todo:: Docstrings.
"""
utc_datetime: datetime
utc = pytz.timezone('UTC')
utc_datetime = utc.normalize(est_datetime.astimezone(utc))
return utc_datetime
[docs]
def military_time_to_edt_datetime_aware(military_time: str) -> datetime:
"""
.. todo:: Docstrings.
"""
datetime_edt_aware: datetime
military_time_int = int(military_time)
military_time_hours_int = int(military_time[0:2])
military_time_minutes_int = int(military_time[2:4])
est = pytz.timezone('US/Eastern')
right_now = datetime.now(tz=est)
datetime_edt_aware: datetime = right_now.replace(
hour=military_time_hours_int, minute=military_time_minutes_int, second=0, microsecond=0
)
datetime_edt_aware.astimezone(est)
return datetime_edt_aware
[docs]
def military_time_to_cest_datetime_aware(military_time: str) -> datetime:
"""
.. todo:: Docstrings.
"""
military_time_hours_int = int(military_time[0:2])
military_time_minutes_int = int(military_time[2:4])
cest = pytz.timezone('Europe/Brussels')
right_now = datetime.now(tz=cest)
datetime_cest_aware: datetime = right_now.replace(
hour=military_time_hours_int, minute=military_time_minutes_int, second=0, microsecond=0
)
datetime_cest_aware.astimezone(cest)
return datetime_cest_aware
[docs]
def military_time_to_utc_datetime_aware(military_time: str) -> datetime:
"""
.. todo:: Docstrings.
Notes:
military time arrives as 24 hour HHMM format (e.g. 0800).
"""
datetime_utc_aware: datetime
military_time_int = int(military_time)
military_time_hours_int = int(military_time[0:2])
military_time_minutes_int = int(military_time[2:4])
if military_time_int >= 1200:
military_time_with_postfix = f'{military_time[0:2]}:{military_time[2:4]} PM'
else:
military_time_with_postfix = f'{military_time[0:2]}:{military_time[2:4]} AM'
EST = pytz.timezone('US/Eastern')
right_now = datetime.now()
right_now_EDT = EST.localize(dt=right_now, is_dst=True)
datetime_edt_aware: datetime = right_now_EDT.replace(hour=military_time_hours_int, minute=military_time_minutes_int, second=0, microsecond=0, tzinfo=pytz.timezone('US/Eastern'))
# military_datetime_with_postfix = datetime.strptime(military_time_with_postfix, "%I:%M %p")
datetime_utc_aware: datetime = datetime_edt_aware.astimezone(tz=pytz.timezone('UTC'))
return datetime_utc_aware
[docs]
def seconds_until_datetime(date_time: datetime) -> float:
"""
.. todo:: Docstrings.
"""
remaining_seconds: float
right_now: datetime = datetime.now(tz=pytz.timezone('US/Eastern'))
delta = date_time - right_now
remaining_seconds = delta.total_seconds()
return remaining_seconds