time, datetime, and zoneinfo. Working examples for every common operation — get current time, convert epoch to date, convert date to epoch, format display, parse, and handle timezones.
The `time` module gives you epoch seconds directly. The `datetime` module is more flexible for arithmetic.
import time
int(time.time())
# → 1735689600
import time
time.time()
# → 1735689600.123456
import time
int(time.time() * 1000)
# → 1735689600123
import time
time.time_ns()
# → 1735689600123456789
Use `datetime.fromtimestamp()` for local time or `datetime.utcfromtimestamp()` for UTC. Always specify the timezone explicitly to avoid confusion.
from datetime import datetime, timezone
dt = datetime.fromtimestamp(1735689600, tz=timezone.utc)
print(dt.isoformat())
# → 2025-01-01T00:00:00+00:00
from datetime import datetime
dt = datetime.fromtimestamp(1735689600)
print(dt) # In your machine's local time
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime.fromtimestamp(1735689600, tz=ZoneInfo("America/New_York"))
print(dt)
# → 2024-12-31 19:00:00-05:00
Use `.timestamp()` — but make sure your datetime has timezone info, or Python will assume local time.
from datetime import datetime, timezone
int(datetime.now(timezone.utc).timestamp())
# → 1735689600
from datetime import datetime, timezone
dt = datetime(2025, 1, 1, 0, 0, 0, tzinfo=timezone.utc)
int(dt.timestamp())
# → 1735689600
from datetime import datetime
from zoneinfo import ZoneInfo
dt = datetime(2025, 1, 1, 0, 0, 0, tzinfo=ZoneInfo("America/New_York"))
int(dt.timestamp())
# → 1735707600 (5 hours later than UTC midnight)
Use `strftime()` for custom formats, or `isoformat()` for ISO 8601.
from datetime import datetime, timezone
datetime.now(timezone.utc).isoformat()
# → "2025-01-01T00:00:00+00:00"
from datetime import datetime, timezone
dt = datetime.fromtimestamp(1735689600, tz=timezone.utc)
dt.strftime("%Y-%m-%d %H:%M:%S %Z")
# → "2025-01-01 00:00:00 UTC"
from email.utils import format_datetime
from datetime import datetime, timezone
format_datetime(datetime.now(timezone.utc))
# → "Wed, 01 Jan 2025 00:00:00 +0000"
`datetime.fromisoformat()` handles ISO 8601. For other formats, use `strptime()` with the right pattern.
from datetime import datetime
datetime.fromisoformat("2025-01-01T00:00:00+00:00")
# Python 3.11+ handles full ISO 8601 including Z suffix:
datetime.fromisoformat("2025-01-01T00:00:00Z")
from datetime import datetime
datetime.strptime("2025-01-01 14:30", "%Y-%m-%d %H:%M")
# Note: result is naive (no timezone)
from email.utils import parsedate_to_datetime
parsedate_to_datetime("Wed, 01 Jan 2025 00:00:00 GMT")
Pitfalls to watch for when working with Python dates.
# A "naive" datetime has no tzinfo. A "naive" datetime
# can't be safely converted to epoch — Python assumes local time.
# ALWAYS make datetimes timezone-aware:
from datetime import datetime, timezone
good = datetime.now(timezone.utc)
bad = datetime.now() # naive, avoid
# Python 3.12+ deprecates utcnow() because it returns naive UTC.
# Use this instead:
from datetime import datetime, timezone
datetime.now(timezone.utc)
# zoneinfo (stdlib, Python 3.9+) is the recommended choice.
# pytz is the older library — it works but has quirky API.
# For new code, use zoneinfo:
from zoneinfo import ZoneInfo
ZoneInfo("America/New_York")
Need to quickly check what a specific timestamp converts to? Use the main converter — paste any value and get every format back.
Working with many timestamps at once? Try the batch converter — paste a list, get a CSV or JSON file back.