California Doesn't Have One Time Zone
Most people treat California as a single time slot on a calendar invite. That's why meetings get missed and deployments break. The state sits in the Pacific zone but flips between two abbreviations depending on the season, and the switch dates aren't consistent year to year. I've lost track of the number of times someone on a call asked whether it was PST or PDT because the other person's calendar app had already rolled the change forward while theirs hadn't. The short version is straightforward. California observes Pacific Standard Time, which is UTC-8, and Pacific Daylight Time, which is UTC-7. The switch happens twice a year on a fixed rule, not a fixed date. Clocks spring forward at 2:00 AM on the second Sunday in March and fall back at 2:00 AM on the first Sunday in November. That rule comes from the Energy Policy Act of 2005, which standardized daylight saving transitions across most of the United States. Prior to that, the dates varied, which is why older documentation sometimes references conflicting schedules. The abbreviation matters more than most people realize. PST means the clock is on standard time. PDT means the clock has shifted an hour forward for daylight saving. If you are reading logs, writing scripts, or coordinating across systems, the difference between those two identifiers determines whether a timestamp is off by exactly one hour. I once debugged a deployment script that failed every March because it assumed PST year-round and compared UTC timestamps against a hard-coded offset of minus eight. It only worked in winter. The fix was switching to UTC throughout and removing local time assumptions entirely. That took about ten minutes once I identified the root cause, which itself took about three hours of digging through stale commit history.
Why The Distinction Actually Matters In Practice
Time zone problems rarely show up as big failures. They show up as small inconsistencies that pile up. A log entry says a request arrived at 3:00 AM. The team assumes PST and reads it as 11:00 PM Pacific. It was actually PDT, so the real wall clock time was midnight. No one calls support about a one-hour shift. They shrug and move on. But when you are reconciling payment batches, audit trails, or cross-server coordination, that shrug compounds into actual broken data. The American system also treats California differently from places like Arizona. Arizona does not observe daylight saving time and stays on MST year-round. When California springs forward in March, Arizona is suddenly an hour behind California instead of the same. When California falls back in November, they align again. If your infrastructure includes nodes in Phoenix and Los Angeles, your scheduling logic needs to account for that six-month flip. I learned that the hard way when monitoring alerts fired at odd hours because a Grafana dashboard was set to PST while the server in Arizona was on MST and the two were never in sync during the overlapping window.
Edge Cases That Break Most Assumptions
The transition moments themselves are the biggest source of errors. When clocks spring forward, the hour from 2:00 AM to 3:00 AM does not exist. When they fall back, that same hour repeats. Systems that naively schedule jobs at 2:30 AM will miss one transition and execute twice on the other. Database entries with ambiguous timestamps during the fall-back hour become impossible to resolve without an explicit UTC conversion at write time. I've seen production databases store local time with no offset metadata, which makes historical queries unreliable once you go back past the most recent transition. Another issue that nobody mentions often enough is how Linux handles timezone data compared to Windows and macOS. Linux relies on the tz database, which gets updated through package managers. If your server is running an older version of the tzdata package, it may not know about policy changes. The United States changed DST start dates in 2007, and any system that hasn't been updated since then will still calculate the old March and November rules. I ran into this on an older CentOS box that was scheduling a monthly report four weeks early because its timezone database was stuck on pre-2007 rules. Updating tzdata through yum fixed it immediately. The same kind of stale data problem shows up in container images built from outdated base layers.
Get the Full Details

How To Handle This Without Headaches
Store everything in UTC. This is not advice, it is the only reliable approach. Convert to Pacific time only at the outer edges, when you display something to a human or accept input from a human. Applications like Node.js, Python, Java, and Go all have solid libraries for this. Use them. In JavaScript, moment-timezone and date-fns-tz are common choices. In Python, the built-in datetime module paired with zoneinfo works cleanly for modern versions. The key point is to avoid local time storage for anything that needs to survive a transition. If you must work in local time for display purposes, always tie the timestamp to its zone identifier rather than its abbreviation. PST and PDT are ambiguous labels. America/Los_Angeles is unambiguous. Most people skip this detail because they assume their audience is in the same region, but if a user ever travels or if your logs are accessed internationally, the abbreviation alone loses information.
Where This Approach Falls Short
Storing UTC does not solve every problem. Legacy systems with hard-coded offsets will require migration, and that is not trivial. Some older ERP and accounting tools lock timestamps into local time for regulatory reasons, which means you inherit the ambiguity at the source. In those cases, you can add an explicit offset column alongside the local timestamp, but it requires discipline across every write path. If one service writes local time without documenting the offset, the clean data model breaks. I have worked on projects where this happened because a contractor added a new endpoint without following the established pattern, and it took weeks to find the drift. Annoyingly, even when you use UTC everywhere internally, third-party APIs often return data in local time without stating which variant they used. A payment gateway might return PST when they mean PDT, or vice versa, depending on how their front end formats the response. You need to verify the source behavior and build in validation. A simple check against the known transition dates will catch mismatches early. If a timestamp falls in the ambiguous window during fall-back and the API did not specify the offset, you cannot determine the correct UTC value without additional context from the API documentation or the sender. The California time zone question is smaller than it looks. The PST versus PDT distinction is a recurring pain point because it is easy to gloss over, and the consequences are delayed. The practical takeaway is to treat local time as a display concern, keep UTC in your storage layer, and verify third-party outputs against the current year's transition schedule. That covers the vast majority of real-world failures without requiring complex tooling.