How to add N hours to a date string in Python

2 Answers

0 votes
from dateutil import parser, tz
from datetime import timedelta
 
s = "May 21 2026 7:30 pm EST"
n = 10
 
# Map EST to a real timezone
tzinfos = {
    "EST": tz.gettz("America/New_York")
}
 
dt = parser.parse(s, tzinfos=tzinfos)
dt_plus_12 = dt + timedelta(hours=n)
 
print(dt_plus_12)
 
 
 
'''
run:
 
2026-05-22 05:30:00-04:00
 
'''

 



answered 5 hours ago by avibootz
edited 5 hours ago by avibootz
0 votes
from dateutil import parser, tz
from datetime import timedelta

# Known timezone mappings
TZINFOS = {
    "EST": tz.gettz("America/New_York"),
    "EDT": tz.gettz("America/New_York"),
    "CST": tz.gettz("America/Chicago"),
    "CDT": tz.gettz("America/Chicago"),
    "PST": tz.gettz("America/Los_Angeles"),
    "PDT": tz.gettz("America/Los_Angeles"),
}

def add_hours_to_date_string(date_str: str, hours: int):
    """
    Parse a date string with timezone abbreviations and add N hours.
    Returns a timezone-aware datetime.
    """
    dt = parser.parse(date_str, tzinfos=TZINFOS)
    return dt + timedelta(hours=hours)

def run_tests():
    print("Running tests...\n")

    # Test 1 — your original example
    s1 = "May 21 2026 7:30 pm EST"
    result1 = add_hours_to_date_string(s1, 12)
    print("Test 1:", result1, "EXPECTED: 2026-05-22 07:30:00-04:00\n")

    # Test 2 — morning time
    s2 = "May 21 2026 8:00 am EST"
    result2 = add_hours_to_date_string(s2, 5)
    print("Test 2:", result2, "EXPECTED: 2026-05-21 13:00:00-04:00\n")

    # Test 3 — crossing midnight
    s3 = "May 21 2026 11:15 pm EST"
    result3 = add_hours_to_date_string(s3, 10)
    print("Test 3:", result3, "EXPECTED: 2026-05-22 09:15:00-04:00\n")

    # Test 4 — different timezone
    s4 = "May 21 2026 3:00 pm PST"
    result4 = add_hours_to_date_string(s4, 4)
    print("Test 4:", result4, "EXPECTED: 2026-05-21 22:00:00-07:00\n")

    # Test 5 — large hour addition
    s5 = "May 21 2026 1:00 pm EST"
    result5 = add_hours_to_date_string(s5, 48)
    print("Test 5:", result5, "EXPECTED: 2026-05-23 13:00:00-04:00\n")


# Run tests
run_tests()




'''
run:

Running tests...

Test 1: 2026-05-22 07:30:00-04:00 EXPECTED: 2026-05-22 07:30:00-04:00

Test 2: 2026-05-21 13:00:00-04:00 EXPECTED: 2026-05-21 13:00:00-04:00

Test 3: 2026-05-22 09:15:00-04:00 EXPECTED: 2026-05-22 09:15:00-04:00

Test 4: 2026-05-21 19:00:00-07:00 EXPECTED: 2026-05-21 22:00:00-07:00

Test 5: 2026-05-23 13:00:00-04:00 EXPECTED: 2026-05-23 13:00:00-04:00

'''

 



answered 5 hours ago by avibootz

Related questions

3 answers 246 views
1 answer 120 views
1 answer 139 views
139 views asked Jun 21, 2021 by avibootz
1 answer 123 views
123 views asked Mar 24, 2022 by avibootz
1 answer 193 views
1 answer 182 views
...