To convert UTC to EST, subtract 5 hours: 12:00 UTC is 07:00 EST. That’s the winter rule only. From the second Sunday in March to the first Sunday in November, New York and the rest of the US Eastern time zone keep EDT, UTC−4, and you subtract 4 instead.
Through 2026
Jan 1 – Mar 8 EST UTC−5 12:00 UTC is 07:00
Mar 8 – Nov 1 EDT UTC−4 12:00 UTC is 08:00
Nov 1 – Dec 31 EST UTC−5 12:00 UTC is 07:00
The clocks change at 02:00 local time. On March 8 they jump from 02:00 EST to 03:00 EDT, at 07:00 UTC; on November 1 they fall back from 02:00 EDT to 01:00 EST, at 06:00 UTC. Toronto and Detroit change on the same dates.
A worked conversion
The tool below starts at 12:00 UTC on Thursday, January 15, 2026. Copy times gives:
2026-01-15 12:00 UTC (UTC+00:00, UTC)
2026-01-15 07:00 America/New_York (UTC-05:00, EST)
The same time on July 15, 2026 is 08:00 EDT. Watch the date, too: anything before 05:00 UTC (04:00 in summer) is still the previous evening in New York, so 04:30 UTC on January 15 is 23:30 EST on January 14.
The abbreviation trap
People write “EST” all year when they mean Eastern time. A July invite for “3 PM EST” almost always means 3 PM EDT, which is 19:00 UTC; read literally, it’s 20:00 UTC. Write “ET”, or better, name the zone.
Code takes EST literally. In the tz database, EST is a zone of its own, fixed at UTC−5: right for Panama, Jamaica and Cancún, which keep EST all year, and an hour off for New York in summer. Node.js 22 resolves timeZone: 'EST' to America/Panama:
new Date('2026-07-15T12:00:00Z').toLocaleString('en-US', { timeZone: 'EST', timeZoneName: 'short' })
// '7/15/2026, 7:00:00 AM EST' New York reads 8:00 AM EDT
The tool below reads a typed EST as America/New_York instead, and its note says when New York is on EDT.
In code
Use America/New_York, which carries the daylight saving rules:
new Date('2026-01-15T12:00:00Z').toLocaleString('en-US', { timeZone: 'America/New_York', timeZoneName: 'short' })
// '1/15/2026, 7:00:00 AM EST'
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
datetime(2026, 7, 15, 12, 0, tzinfo=timezone.utc).astimezone(ZoneInfo("America/New_York")).isoformat()
# '2026-07-15T08:00:00-04:00'
TZ=America/New_York date -d '2026-01-15 12:00 UTC' # GNU date; gdate on macOS
# Thu Jan 15 07:00:00 EST 2026
Scheduling
A meeting fixed in UTC moves on New York’s clock: a 14:00 UTC standup is 09:00 there in January and 10:00 in July. If it should stay at 09:00 New York time, schedule it in America/New_York and let the calendar work out the UTC time.