Timezone and timestamp bugs quietly poison your training data
One system logs in UTC, another in local time, a third in whatever the server was set to. Mix them and the order of events scrambles. A model that learns from scrambled time learns the wrong lessons.
Timezone and timestamp bugs quietly poison your training data
Time looks like the one field you can trust. A timestamp is just a number, and numbers do not lie. Then you pull events from three systems that each recorded time differently, line them up, and discover that according to your data a customer received a shipment before they placed the order. The model does not question that. It learns from it.
The same instant, written three ways
A moment in time can be stored in ways that all claim to be correct and disagree completely. One system writes UTC. Another writes the user’s local time with no zone attached, so 3 p.m. in one record and 3 p.m. in another are actually hours apart. A third writes whatever the server clock was set to, which drifted, or changed when the box moved data centers. A fourth stores a date with no time at all. Each is internally consistent. Together they are a mess, and the mess is invisible because every value looks like a valid timestamp.
A product manager whose whole job is moving data out of fragmented SaaS apps into a warehouse runs into this constantly, because her connectors pull the same kind of event from systems that each made their own timezone choices years ago. Nothing errors when those records land side by side. They just no longer describe a single coherent timeline, and any feature built on the order of events is now built on sand.
Ordering is where it does the damage
Most time-based features depend on sequence. Time since last order. Whether a support ticket came before or after a purchase. The gap between signup and first use. Session length. Every one of these is a subtraction between two timestamps, and if those two came from systems on different clocks, the subtraction is wrong. You get negative durations, sessions that appear to last a negative number of minutes, events that happen out of order, and gaps that are off by exactly the offset between two zones.
Feed that into a model and it learns confident nonsense. It might learn that shipments precede orders, that a common behavior is impossible, or that a real pattern is noise because the timestamps that would reveal it are scrambled. AI features generally need on the order of 85% accuracy to hold up, and time corruption is a fast way under that line, because it does not damage one feature, it damages every feature that touches sequence. The model still trains. It still scores. It has just learned from a timeline that never happened.
The tell is impossible sequences
Time corruption leaves fingerprints if you look. Negative durations are the obvious one. So are clusters of events at suspicious hours, a pile of activity at exactly midnight because a date got stored with no time and defaulted to 00:00, or a spike at a round-numbered offset that is really one timezone masquerading as another. When your event sequences contain orderings that cannot physically happen, the problem is not a rare edge case. It is a timezone assumption that broke across a whole source.
Normalize to one clock before anything else
The discipline is boring and non-negotiable. Convert every timestamp to a single reference, usually UTC, at the point it enters the pipeline, and store the original zone if you might need local time later. Decide what a date-only field means and stop it from silently becoming midnight. Do this before you build a single time-based feature, because a feature computed on mixed clocks is wrong in a way no downstream tuning can fix. The cleanup is cheap early and archaeological late, once the scrambled timestamps are already baked into a training set.
How we approach it at Density Labs
In the AI Opportunity Assessment, our fixed two week, $2,500 engagement, we check how time is stored across every source a feature depends on and whether it is normalized to one clock before anyone computes on it. Where systems log in different zones or formats, we flag it, because scrambled time quietly poisons every ordering and every duration the model learns from. We would rather catch the UTC-versus-local mismatch in week one than trace impossible event sequences through a trained model in month four.
If your data says the package arrived before the order, the model believes it. Fix the clocks first.