How to Get the Start and End of a Day in Python (Code Examples for Developers)

Learn how to accurately get the start and end of a day in Python for logging, file processing, and API development. Includes timezone handling, practical code, and tips for robust API workflows.

Lynn Mikami

Lynn Mikami

30 January 2026

How to Get the Start and End of a Day in Python (Code Examples for Developers)

Apidog for Enterprise

On-Premises Deploy

SSO & RBAC

SOC 2 Compliant

Explore Apidog Enterprise

Working with timestamps and precise date boundaries is a daily task for backend engineers, API developers, and QA teams. Whether you're filtering logs, processing files, or building time-based queries, knowing how to calculate the start and end of a day in Python is essential.

This guide shows you fast, reliable ways to get daily boundaries in Python—with practical code, timezone handling, and real-world examples.


Why Getting Day Boundaries Matters for Developers

APIs, automation scripts, and data pipelines often need to:

Getting the exact start (00:00:00) and end (23:59:59.999999) of a day avoids off-by-one errors, missed records, and time zone bugs.


Python's Core Tool: The datetime Module

Python's built-in datetime module makes handling dates and times straightforward—no need for third-party basics.

from datetime import datetime, date, time

How to Get the Start of Today in Python

To get midnight at the beginning of the current day:

from datetime import datetime, date, time

today = date.today()
start_of_day = datetime.combine(today, time.min)
print(f"Start of day: {start_of_day}")

Output:

Start of day: 2024-01-15 00:00:00

How to Get the End of Today

For the very end of today, use time.max for the highest possible microsecond:

from datetime import datetime, date, time

today = date.today()
end_of_day = datetime.combine(today, time.max)
print(f"End of day: {end_of_day}")

Output:

End of day: 2024-01-15 23:59:59.999999

A Reusable Function for Day Boundaries

To make your code reusable and clean, wrap this logic in a function:

from datetime import datetime, date, time

def get_day_boundaries(target_date=None):
    """
    Returns (start_of_day, end_of_day) datetime objects for the given date.
    If no date is provided, uses today.
    """
    if target_date is None:
        target_date = date.today()
    start_of_day = datetime.combine(target_date, time.min)
    end_of_day = datetime.combine(target_date, time.max)
    return start_of_day, end_of_day

# Example usage:
start, end = get_day_boundaries()
print(f"Today starts at: {start}")
print(f"Today ends at: {end}")

# For a specific date:
specific_date = date(2024, 12, 25)
start, end = get_day_boundaries(specific_date)
print(f"Christmas starts at: {start}")
print(f"Christmas ends at: {end}")

Handling Time Zones: Accurate Day Boundaries Worldwide

If your application processes data across regions, always use timezone-aware datetimes. Python 3.9+ includes the modern zoneinfo module:

from datetime import datetime, date, time
from zoneinfo import ZoneInfo

today = date.today()
timezone = ZoneInfo("America/Chicago")

start_of_day = datetime.combine(today, time.min, timezone)
end_of_day = datetime.combine(today, time.max, timezone)

print(f"Start of day in Central Time: {start_of_day}")
print(f"End of day in Central Time: {end_of_day}")

Real-World Use Cases

1. Log Analysis: Filter Events from "Today"

today_start, today_end = get_day_boundaries()
todays_errors = [log for log in error_logs 
                 if today_start <= log.timestamp <= today_end]

2. File Processing: Only Today's Files

import os
from datetime import datetime

today_start, today_end = get_day_boundaries()

for filename in os.listdir('/path/to/files'):
    file_time = datetime.fromtimestamp(os.path.getctime(filename))
    if today_start <= file_time <= today_end:
        process_file(filename)

Quick Reference: Copy-Paste Cheat Sheet

Here's a quick snippet you can reuse:

from datetime import datetime, date, time

today = date.today()
start_of_day = datetime.combine(today, time.min)
end_of_day = datetime.combine(today, time.max)

print(f"Day starts: {start_of_day}")
print(f"Day ends: {end_of_day}")

Pro Tip: Build Robust APIs with Accurate Time Windows

When building APIs that accept date ranges or return time-based data, always use precise start and end boundaries. This avoids missing or duplicating records—especially important for audit logs, billing, and analytics.

For teams building and testing APIs, a reliable toolchain is crucial. Apidog helps you generate beautiful API documentation, automate tests, and collaborate efficiently. It’s an all-in-one platform designed for productive API development and smooth teamwork. Want to maximize productivity and replace Postman at a much more affordable price? Learn more about Apidog's integrated workflow.

button

Explore more

How to use GPT-6.1 Sol APl ?

How to use GPT-6.1 Sol APl ?

GPT-6.1 Sol API guide: your first gpt-6.1-sol request, effort levels, Batch/Flex/Fast pricing, and the four changes to migrate from gpt-6-sol.

30 September 2026

What Is GPT-6.1 Sol?

What Is GPT-6.1 Sol?

GPT-6.1 Sol explained: model ID gpt-6.1-sol, $2/$10 pricing with $0.10 cached input, 922K max input, effort levels, and OpenAI's benchmarks vs Astra.

30 September 2026

OpenAI DevDay 2026 for API developers: what shipped, what it costs, and what's still coming soon

OpenAI DevDay 2026 for API developers: what shipped, what it costs, and what's still coming soon

OpenAI DevDay 2026 for API developers: GPT-6.1 Sol at $2/$10, Ultrafast on Astra, Agents API computer use, MCP Events, and what to change this week.

30 September 2026

Practice API Design-first in Apidog

Discover an easier way to build and use APIs

How to Get the Start and End of a Day in Python (Code Examples for Developers)