This guide demonstrates how to retrieve the start and end timestamps for the current day, the previous day, and two days ago using Python's datetime module.
Retrieving Current Day Boundaries
from datetime import datetime, timedelta
class TimeRangeCalculator:
"""Utility class for calculating date range boundaries."""
@staticmethod
def current_day_range():
"""Returns today's start and end as datetime objects."""
current = datetime.now()
day_start = current.replace(hour=0, minute=0, second=0, microsecond=0)
day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
return day_start, day_end
@staticmethod
def current_day_range_formatted():
"""Returns today's start and end as formatted strings."""
current = datetime.now()
day_start = current.strftime("%Y-%m-%d 00:00:00")
day_end = current.strftime("%Y-%m-%d 23:59:59")
return day_start, day_end
Retrieving Previous Day Boundaries
from datetime import datetime, timedelta
class TimeRangeCalculator:
@staticmethod
def previous_day_range():
"""Returns yesterday's start and end as datetime objects."""
prior = datetime.now() - timedelta(days=1)
day_start = prior.replace(hour=0, minute=0, second=0, microsecond=0)
day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
return day_start, day_end
@staticmethod
def previous_day_range_formatted():
"""Returns yesterday's start and end as formatted strings."""
prior = datetime.now() - timedelta(days=1)
day_start = prior.strftime("%Y-%m-%d 00:00:00")
day_end = prior.strftime("%Y-%m-%d 23:59:59")
return day_start, day_end
Rterieving Two Days Ago
To obtain boundaries for the day before yesterday, subtract one additional day from yesterday's range:
yesterday_range = TimeRangeCalculator.previous_day_range()
two_days_ago_start = yesterday_range[0] - timedelta(days=1)
two_days_ago_end = yesterday_range[1] - timedelta(days=1)
Compleet Implementation Example
from datetime import datetime, timedelta
class TimeRangeCalculator:
"""Handles date range calculations for common time periods."""
@staticmethod
def current_day_range():
"""Returns today's start and end as datetime objects."""
current = datetime.now()
day_start = current.replace(hour=0, minute=0, second=0, microsecond=0)
day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
return day_start, day_end
@staticmethod
def current_day_range_formatted():
"""Returns today's start and end as formatted strings."""
current = datetime.now()
day_start = current.strftime("%Y-%m-%d 00:00:00")
day_end = current.strftime("%Y-%m-%d 23:59:59")
return day_start, day_end
@staticmethod
def previous_day_range():
"""Returns yesterday's start and end as datetime objects."""
prior = datetime.now() - timedelta(days=1)
day_start = prior.replace(hour=0, minute=0, second=0, microsecond=0)
day_end = day_start + timedelta(days=1) - timedelta(seconds=1)
return day_start, day_end
@staticmethod
def previous_day_range_formatted():
"""Returns yesterday's start and end as formatted strings."""
prior = datetime.now() - timedelta(days=1)
day_start = prior.strftime("%Y-%m-%d 00:00:00")
day_end = prior.strftime("%Y-%m-%d 23:59:59")
return day_start, day_end
if __name__ == '__main':
# Current day boundaries
today_dt = TimeRangeCalculator.current_day_range()
today_str = TimeRangeCalculator.current_day_range_formatted()
# Previous day boundaries
yesterday_dt = TimeRangeCalculator.previous_day_range()
yesterday_str = TimeRangeCalculator.previous_day_range_formatted()
# Two days ago boundaries
two_days_ago_start = yesterday_dt[0] - timedelta(days=1)
two_days_ago_end = yesterday_dt[1] - timedelta(days=1)
print(f"Today's start (datetime): {today_dt[0]}")
print(f"Today's end (datetime): {today_dt[1]}")
print(f"Today's start (string): {today_str[0]}")
print(f"Today's end (string): {today_str[1]}")
print(f"Yesterday's start (datetime): {yesterday_dt[0]}")
print(f"Yesterday's end (datetime): {yesterday_dt[1]}")
print(f"Yesterday's start (string): {yesterday_str[0]}")
print(f"Yesterday's end (string): {yesterday_str[1]}")
print(f"Two days ago start: {two_days_ago_start}")
print(f"Two days ago end: {two_days_ago_end}")
The key technique involves using replace() to set time components to midnight for the start, then adding one day and subtracting one second to get the precise end timestamp.