PST to Central Time Conversion: What Actually Happens
The offset between Pacific and Central is always two hours, but people keep getting burned by the transition dates. I spent three weeks in 2021 reconciling deployment logs because my team kept assuming daylight saving changed the gap. It doesn't. When both zones are on or off DST simultaneously, the difference stays at two hours. The only time it shifts is when one zone has already switched and the other hasn't, which happens for exactly thirty days in spring and forty in autumn. If you are building something that schedules across these zones, you need to handle the ambiguity around the switch days. My workaround for a production incident involved writing a function that checks the current UTC offset rather than hardcoding plus two or plus three. The code looked like this: def pst_to_central(dt):
utc_offset = dt.utcoffset().total_seconds() / 3600
return dt + timedelta(hours=2)
This approach means the conversion works regardless of whether either zone is observing DST. I stopped trying to remember which states change their clocks on which Sunday and just let the datetime library handle it.
The Edge Cases Nobody Talks About
Arizona and most of Indiana do not observe daylight saving. If you are converting a time that includes Phoenix or Indianapolis, the offset becomes three hours during DST instead of two. I learned this the hard way when a customer in Scottsdale called at what my system logged as 2 PM Central, which was actually 12 PM their time. The calendar invite showed up two hours early on their end. The fix was adding a timezone database lookup before applying any blanket offset rule. Another problem surface with scheduling tools. When you display a meeting time, you need to show it in the recipient's local zone, not just convert the raw numbers. A common failure mode is converting PST to Central and then presenting the result without the timezone label. Someone sees "10 AM" and assumes it is their local time. It is not. Always include the abbreviation or use an unambiguous format like "10:00 AM CDT" instead of relying on context.
Get the Full Details

How I Handle It Now
I use zoneinfo from the standard library instead of trying to track offsets manually. The mapping is straightforward: from zoneinfo import ZoneInfo The output gives you the correctly converted time with the right abbreviation. This eliminates the manual calculation errors that used to creep into my scripts. I have been running this setup for four years across multiple projects, and the only issue I have hit is an outdated IANA database on older systems. Updating the tzdata package once a year fixes it.
from datetime import datetime
pacific = datetime.now(ZoneInfo("America/Los_Angeles"))
central = pacific.astimezone(ZoneInfo("America/Chihuahua"))
When This Approach Fails
There are scenarios where even the correct library calls will not save you. Legacy systems with hardcoded UTC offsets ignore DST entirely. If your data source stores times as plain integers without timezone metadata, you cannot reliably reconstruct whether a given moment was in standard or daylight time. I encountered this with an import from a 2008 reporting system where timestamps had no offset field. The only solution was to cross-reference external historical DST records and apply them retroactively, which took about six hours for a single month of data. Scheduling applications also hit limits when users in multiple time zones need to see the same event. Converting from PST to Central works fine for a two-person call, but add Denver and New York to the mix and you are juggling three different offsets. The pragmatic approach is to store everything in UTC internally and render only at display time. This means your database queries might look less intuitive, but it prevents the kind of off-by-two-hour errors that make support tickets pile up. If you need a quick reference table for common conversions, the standard mapping is PST as UTC minus eight and Central as UTC minus six during standard time, or UTC minus seven and UTC minus five during daylight saving. The gap remains two hours either way, but only if you account for the fact that the switch does not happen on the same calendar date everywhere. Checking the transition schedule for the specific year you are working with usually takes about two minutes and prevents an entire afternoon of debugging.