Source code for mpu.datetime

"""Datetime related utility functions."""

# Core Library
import datetime as dt
import random

# Third party
import pytz

local_random = random.Random()


[docs]def add_time(datetime_obj, days=0, hours=0, minutes=0, seconds=0): """ Add time to a timezone-aware datetime object. This keeps the timezone correct, even if it changes due to daylight saving time (DST). Parameters ---------- datetime_obj : datetime.datetime days : int hours : int minutes : int seconds : int Returns ------- datetime : datetime.datetime """ seconds += minutes * 60 seconds += hours * 60**2 seconds += days * 24 * 60**2 t14 = datetime_obj + dt.timedelta(seconds=seconds) # Invalid timezone! t14 = t14.astimezone(pytz.utc).astimezone(t14.tzinfo) # Fix the timezone return t14
[docs]def generate(minimum, maximum, local_random=local_random): """ Generate a random date. The generated dates are uniformly distributed. Parameters ---------- minimum : datetime object maximum : datetime object local_random : random.Random Returns ------- generated_date : datetime object Examples -------- >>> import random; r = random.Random(); r.seed(0) >>> from datetime import datetime >>> generate(datetime(2018, 1, 1), datetime(2018, 1, 2), local_random=r) datetime.datetime(2018, 1, 1, 20, 15, 58, 47972) >>> generate(datetime(2018, 1, 1), datetime(2018, 1, 2), local_random=r) datetime.datetime(2018, 1, 1, 18, 11, 27, 260414) """ if not (minimum < maximum): raise ValueError(f"{minimum} is not smaller than {maximum}") time_d = maximum - minimum time_d_rand = time_d * local_random.random() generated = minimum + time_d_rand return generated