10. Chapter 10: Python Date and Time

10.1. Python datetime

10.1.1. 1. Overview of the datetime Module

The datetime module is used for handling date and time operations with high precision and reliability:

import datetime

print(datetime.datetime.now())

It supports full timestamping, scheduling, comparisons, and formatting.

10.1.2. 2. Current Date and Time

from datetime import datetime

now = datetime.now()
print(now)

Returns the current system date and time including microseconds.

10.1.3. 3. Extracting Date Components

from datetime import datetime

now = datetime.now()

print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)

10.1.4. 4. Using date and time Objects

from datetime import date, time

d = date(2025, 6, 15)
t = time(14, 30, 45)

print(d)
print(t)

10.1.5. 5. Formatting with strftime()

from datetime import datetime

now = datetime.now()
print(now.strftime("%d-%m-%Y"))
print(now.strftime("%A, %B %d %Y"))

10.1.6. 6. Parsing Strings with strptime()

from datetime import datetime

date_string = "15-06-2025"
dt = datetime.strptime(date_string, "%d-%m-%Y")
print(dt)

10.1.7. 7. Time Difference using timedelta

from datetime import datetime, timedelta

start = datetime.now()
end = start + timedelta(hours=5, minutes=30)

print("Start:", start)
print("End:", end)

10.1.8. 8. Timezone Handling with zoneinfo

from datetime import datetime
from zoneinfo import ZoneInfo

ny_time = datetime.now(ZoneInfo("America/New_York"))
tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))

print("New York:", ny_time)
print("Tokyo:", tokyo_time)

10.1.9. 9. ISO Format Conversion

from datetime import datetime

dt = datetime.now()
print(dt.isoformat())

10.1.10. 10. Practical Example: Scheduling Logic

from datetime import datetime, timedelta

meeting_time = datetime.now() + timedelta(days=2)

if datetime.now() < meeting_time:
    print("Meeting scheduled")
else:
    print("Meeting overdue")

10.2. Python strftime()

10.2.1. 1. What is strftime()

strftime() converts a datetime object into a formatted string based on specified format codes:

from datetime import datetime

now = datetime.now()
formatted = now.strftime("%Y-%m-%d")
print(formatted)  # e.g., 2025-11-24

10.2.2. 2. Basic Date Formatting

from datetime import datetime

now = datetime.now()

print(now.strftime("%d/%m/%Y"))  # Day/Month/Year
print(now.strftime("%m-%d-%Y"))  # Month-Day-Year

10.2.3. 3. Time Formatting

from datetime import datetime

now = datetime.now()

print(now.strftime("%H:%M:%S"))  # 24-hour format
print(now.strftime("%I:%M %p"))  # 12-hour format with AM/PM

10.2.4. 4. Including Day and Month Names

from datetime import datetime

now = datetime.now()

print(now.strftime("%A"))  # Full weekday name
print(now.strftime("%a"))  # Short weekday name
print(now.strftime("%B"))  # Full month name
print(now.strftime("%b"))  # Short month name

10.2.5. 5. Combining Date and Time

from datetime import datetime

now = datetime.now()

print(now.strftime("%Y-%m-%d %H:%M:%S"))

10.2.6. 6. Using strftime() for File Naming

from datetime import datetime

filename = "backup_" + datetime.now().strftime("%Y%m%d_%H%M%S") + ".zip"
print(filename)

10.2.7. 7. ISO 8601 Format Using strftime

from datetime import datetime

now = datetime.now()
iso_format = now.strftime("%Y-%m-%dT%H:%M:%S")
print(iso_format)

10.2.8. 8. Custom Human-Readable Format

from datetime import datetime

now = datetime.now()

print(now.strftime("Today is %A, %d %B %Y at %I:%M %p"))

10.2.9. 9. Formatting Specific datetime Object

from datetime import datetime

custom_date = datetime(2025, 12, 25, 18, 30)

print(custom_date.strftime("%A, %d %B %Y - %H:%M"))

10.2.10. 10. Enterprise Use Case: Log Timestamp

from datetime import datetime

def log_message(message):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] {message}")

log_message("Server started")
log_message("User authenticated")

10.3. Python strptime()

10.3.1. 1. What is strptime()

strptime() converts a date/time string into a datetime object using a specified format pattern:

from datetime import datetime

date_string = "2025-11-24"
dt = datetime.strptime(date_string, "%Y-%m-%d")
print(dt)

10.3.2. 2. Parsing Basic Date Format

from datetime import datetime

date_string = "24/11/2025"
parsed = datetime.strptime(date_string, "%d/%m/%Y")
print(parsed)

10.3.3. 3. Parsing Date and Time Together

from datetime import datetime

datetime_string = "2025-11-24 18:45:30"
dt = datetime.strptime(datetime_string, "%Y-%m-%d %H:%M:%S")
print(dt)

10.3.4. 4. Parsing with Month and Day Names

from datetime import datetime

date_string = "Monday, November 24 2025"
dt = datetime.strptime(date_string, "%A, %B %d %Y")
print(dt)

10.3.5. 5. Parsing 12-Hour Clock Format

from datetime import datetime

time_string = "07:30 PM"
dt = datetime.strptime(time_string, "%I:%M %p")
print(dt.time())

10.3.6. 6. Using strptime() for File Data Processing

from datetime import datetime

log_entry = "2025-11-24 10:15:00 - Server Started"
timestamp = log_entry.split(" - ")[0]

dt = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")
print(dt)

10.3.7. 7. Handling Incorrect Format Errors

from datetime import datetime

try:
    dt = datetime.strptime("24-11-2025", "%Y-%m-%d")
except ValueError as e:
    print("Parsing failed:", e)

10.3.8. 8. Converting User Input Safely

from datetime import datetime

user_input = "15-06-2025"

try:
    parsed_date = datetime.strptime(user_input, "%d-%m-%Y")
    print("Valid date:", parsed_date)
except ValueError:
    print("Invalid date format")

10.3.9. 9. Combining strptime() and strftime()

from datetime import datetime

raw = "2025/11/24"
dt = datetime.strptime(raw, "%Y/%m/%d")
formatted = dt.strftime("%d-%m-%Y")

print(formatted)  # 24-11-2025

10.3.10. 10. Enterprise Use Case: API Timestamp Parsing

from datetime import datetime

api_timestamp = "2025-11-24T14:35:59"
dt = datetime.strptime(api_timestamp, "%Y-%m-%dT%H:%M:%S")

print("Parsed API Timestamp:", dt)

10.4. How to Get Current Date and Time in Python

10.4.1. 1. Using datetime.now() (Most Common Method)

from datetime import datetime

current_datetime = datetime.now()
print(current_datetime)

10.4.2. 2. Get Only Current Date

from datetime import date

today = date.today()
print(today)

10.4.3. 3. Get Only Current Time

from datetime import datetime

current_time = datetime.now().time()
print(current_time)

10.4.4. 4. Formatted Current Date and Time

from datetime import datetime

now = datetime.now()
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)

10.4.5. 5. Using time Module

import time

current_timestamp = time.ctime()
print(current_timestamp)

10.4.6. 6. Using UNIX Timestamp

import time

timestamp = time.time()
print(timestamp)

10.4.7. 7. Current UTC Date and Time

from datetime import datetime

utc_now = datetime.utcnow()
print(utc_now)

10.4.8. 8. Current Date and Time with Timezone

from datetime import datetime
from zoneinfo import ZoneInfo

local_time = datetime.now(ZoneInfo("America/New_York"))
print(local_time)

10.4.9. 9. Human-Friendly Display

from datetime import datetime

now = datetime.now()
print(now.strftime("Today is %A, %d %B %Y - %I:%M %p"))

10.4.10. 10. Enterprise Logging Example

from datetime import datetime

def log_event(event):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] {event}")

log_event("Server Started")
log_event("User Login Successful")

10.5. Python Get Current Time

10.5.1. 1. Using datetime.now().time() (Standard Method)

from datetime import datetime

current_time = datetime.now().time()
print(current_time)

10.5.2. 2. Using strftime() for Formatted Time

from datetime import datetime

now = datetime.now()
formatted_time = now.strftime("%H:%M:%S")
print(formatted_time)

10.5.3. 3. 12-Hour Format with AM/PM

from datetime import datetime

time_12_hour = datetime.now().strftime("%I:%M %p")
print(time_12_hour)

10.5.4. 4. Using the time Module (System Clock)

import time

current_time = time.strftime("%H:%M:%S")
print(current_time)

10.5.5. 5. Get Only Hour, Minute, Second

from datetime import datetime

now = datetime.now()

print("Hour:", now.hour)
print("Minute:", now.minute)
print("Second:", now.second)

10.5.6. 6. Get Current UTC Time

from datetime import datetime

utc_time = datetime.utcnow().time()
print(utc_time)

10.5.7. 7. Timezone-Aware Current Time

from datetime import datetime
from zoneinfo import ZoneInfo

tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo")).time()
print(tokyo_time)

10.5.8. 8. Current Time with Microseconds

from datetime import datetime

now = datetime.now()
print(now.strftime("%H:%M:%S.%f"))

10.5.9. 9. UNIX Time (Epoch Seconds)

import time

epoch_time = time.time()
print(epoch_time)

10.5.10. 10. Enterprise Logging Example (Time-Only Logger)

from datetime import datetime

def log_event(event):
    current_time = datetime.now().strftime("%H:%M:%S")
    print(f"[{current_time}] {event}")

log_event("Service initialized")
log_event("Task executed")

10.6. Python Timestamp to datetime and Vice-Versa

10.6.1. 1. What is a Timestamp

A timestamp represents time as the number of seconds since January 1, 1970 (Unix Epoch):

import time

timestamp = time.time()
print(timestamp)  # e.g. 1732452305.4829

10.6.2. 2. Convert Timestamp → datetime (Local Time)

from datetime import datetime

timestamp = 1732452305
dt = datetime.fromtimestamp(timestamp)

print(dt)

10.6.3. 3. Convert Timestamp → UTC datetime

from datetime import datetime

timestamp = 1732452305
utc_dt = datetime.utcfromtimestamp(timestamp)

print(utc_dt)

10.6.4. 4. Convert datetime → Timestamp

from datetime import datetime

dt = datetime.now()
timestamp = dt.timestamp()

print(timestamp)

10.6.5. 5. Timestamp Conversion with Formatting

from datetime import datetime

timestamp = 1732452305
dt = datetime.fromtimestamp(timestamp)

print(dt.strftime("%Y-%m-%d %H:%M:%S"))

10.6.6. 6. Using time Module for Conversion

import time

timestamp = 1732452305
readable = time.ctime(timestamp)

print(readable)

10.6.7. 7. Convert UTC Timestamp to Local Timezone

from datetime import datetime
from zoneinfo import ZoneInfo

timestamp = 1732452305

utc = datetime.fromtimestamp(timestamp, ZoneInfo("UTC"))
local = utc.astimezone(ZoneInfo("Asia/Kolkata"))

print("UTC:", utc)
print("Local:", local)

10.6.8. 8. Convert datetime String → Timestamp

from datetime import datetime

date_string = "2025-11-24 14:30:00"
dt = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
timestamp = dt.timestamp()

print(timestamp)

10.6.9. 9. Millisecond Timestamp Handling

from datetime import datetime

ms_timestamp = 1732452305482  # milliseconds
dt = datetime.fromtimestamp(ms_timestamp / 1000)

print(dt)

10.6.10. 10. Enterprise Example: Database Time Normalization

from datetime import datetime

def normalize_timestamp(input_value):
    if isinstance(input_value, (int, float)):
        return datetime.fromtimestamp(input_value)
    elif isinstance(input_value, str):
        dt = datetime.strptime(input_value, "%Y-%m-%d %H:%M:%S")
        return dt.timestamp()

print(normalize_timestamp(1732452305))
print(normalize_timestamp("2025-11-24 14:30:00"))

10.7. Python time Module

10.7.1. 1. What is the time Module

The time module provides low-level time-related functions for:

  • Timestamps

  • Delays

  • Performance measurement

  • System clock interactions

import time

print(time.time())

10.7.2. 2. Get Current Time as Readable String

import time

current_time = time.ctime()
print(current_time)

10.7.3. 3. Get Current Time Components

import time

t = time.localtime()
print("Hour:", t.tm_hour)
print("Minute:", t.tm_min)
print("Second:", t.tm_sec)

10.7.4. 4. Sleep / Delay Execution

import time

print("Start")
time.sleep(2)
print("End after 2 seconds")

10.7.5. 5. Measure Execution Time (Performance Timing)

import time

start = time.time()
time.sleep(1)
end = time.time()

print("Execution Time:", end - start, "seconds")

10.7.6. 6. High-Precision Timer with perf_counter()

import time

start = time.perf_counter()
time.sleep(0.5)
end = time.perf_counter()

print("Precise Time:", end - start)

10.7.7. 7. Formatting Time with strftime()

import time

formatted = time.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)

10.7.8. 8. Parsing Time with strptime()

import time

parsed = time.strptime("24-11-2025 10:30:00", "%d-%m-%Y %H:%M:%S")
print(parsed)

10.7.9. 9. Convert Timestamp to Readable Time

import time

timestamp = time.time()
readable = time.ctime(timestamp)

print(readable)

10.7.10. 10. Enterprise Use Case: Rate Limiting Logic

import time

last_request = time.time()

def can_execute():
    global last_request
    current = time.time()
    if current - last_request >= 5:
        last_request = current
        return True
    return False

print(can_execute())

10.8. Python sleep()

10.8.1. 1. What is sleep()

sleep() is a function from the time module that pauses program execution for a specified number of seconds:

import time

print("Start")
time.sleep(2)
print("Resumed after 2 seconds")

10.8.2. 2. Basic Delay in Seconds

import time

time.sleep(5)
print("Executed after 5 seconds")

10.8.3. 3. Sleep with Float Values (Sub-second Precision)

import time

time.sleep(0.5)
print("Executed after 0.5 seconds")

10.8.4. 4. Using sleep() in Loops

import time

for i in range(3):
    print("Processing", i)
    time.sleep(1)

10.8.5. 5. Sleep for Countdown Timer

import time

for i in range(5, 0, -1):
    print("Countdown:", i)
    time.sleep(1)
print("Go!")

10.8.6. 6. Sleep in Retry Mechanism

import time

def retry_operation():
    for attempt in range(3):
        print("Attempt", attempt + 1)
        time.sleep(2)

retry_operation()

10.8.7. 7. Sleep in API Rate Limiting

import time

def api_request():
    print("Request sent")
    time.sleep(1)

for _ in range(5):
    api_request()

10.8.8. 8. Sleep for Background Task Simulation

import time

print("Task started...")
time.sleep(3)
print("Task completed.")

10.8.9. 9. Non-blocking Alternative (asyncio.sleep)

import asyncio

async def task():
    print("Waiting...")
    await asyncio.sleep(2)
    print("Done")

asyncio.run(task())

10.8.10. 10. Enterprise Use Case: Controlled Batch Processing

import time

def process_batches():
    for batch in range(1, 4):
        print(f"Processing batch {batch}")
        time.sleep(2)

process_batches()