{
  "id": 1702417,
  "title": "\"One day later\" and \"24 hours later\" are different quantities — the batch job that drifts an hour every spring",
  "url": "https://urgent.news/2026/08/18/one-day-later-and-24-hours-later-are-different-quantities-the-batch",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-18T12:03:09.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/azathothx/one-day-later-and-24-hours-later-are-different-quantities-the-batch-job-that-drifts-an-hour-184i"
  },
  "original_language": "en",
  "account": "On the day following the change to daylight saving time, a batch job that runs daily at 9:00 started running one hour later. The issue arose because the code treated \"one day\" as both a civil day and 24 hours, while the actual clock difference is 23 hours due to the time jump. This discrepancy caused the batch job to execute at 10:00 instead of the intended 9:00 on the transition day. The problem stems from mixing civil time and elapsed time within the same expression, which is not allowed in the Kairos schedule definition language used. Kairos addresses this issue by separating the two quantities at the literal level, with 1d representing a civil day and 24h representing elapsed time. The language rejects mixed widths at parse time, preventing the bug from occurring. Additionally, the language ensures that nonexistent times, such as the 02:30 gap during daylight saving time transitions, cannot be represented as data, preventing silent errors.",
  "summary": "The code didn't change. The schedule did. There's a batch job on a US East Coast server that runs every morning at 9:00. It has been running fine for months — until the second Sunday of March, when it quietly starts running at 10:00 every morning. Nobody deployed anything. The cause usually looks like this: next = prev + 24 * 60 * 60 * 1000; // \"one day later\" The US East Coast switches to…",
  "key_points": [
    "Batch job ran one hour later on day after daylight saving change",
    "Code treated 'one day' as civil day and 24 hours",
    "Kairos prevents bug by separating civil time and elapsed time"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}