{
  "title": "Timezones",
  "content": "OpenClaw standardizes timestamps so the model sees a **single reference time**.\n\n## Message envelopes (local by default)\n\nInbound messages are wrapped in an envelope like:\n\nThe timestamp in the envelope is **host-local by default**, with minutes precision.\n\nYou can override this with:\n\n* `envelopeTimezone: \"utc\"` uses UTC.\n* `envelopeTimezone: \"user\"` uses `agents.defaults.userTimezone` (falls back to host timezone).\n* Use an explicit IANA timezone (e.g., `\"Europe/Vienna\"`) for a fixed offset.\n* `envelopeTimestamp: \"off\"` removes absolute timestamps from envelope headers.\n* `envelopeElapsed: \"off\"` removes elapsed time suffixes (the `+2m` style).\n\n## Tool payloads (raw provider data + normalized fields)\n\nTool calls (`channels.discord.readMessages`, `channels.slack.readMessages`, etc.) return **raw provider timestamps**.\nWe also attach normalized fields for consistency:\n\n* `timestampMs` (UTC epoch milliseconds)\n* `timestampUtc` (ISO 8601 UTC string)\n\nRaw provider fields are preserved.\n\n## User timezone for the system prompt\n\nSet `agents.defaults.userTimezone` to tell the model the user's local time zone. If it is\nunset, OpenClaw resolves the **host timezone at runtime** (no config write).\n\nThe system prompt includes:\n\n* `Current Date & Time` section with local time and timezone\n* `Time format: 12-hour` or `24-hour`\n\nYou can control the prompt format with `agents.defaults.timeFormat` (`auto` | `12` | `24`).\n\nSee [Date & Time](/date-time) for the full behavior and examples.",
  "code_samples": [
    {
      "code": "[Provider ... 2026-01-05 16:26 PST] message text",
      "language": "unknown"
    },
    {
      "code": "* `envelopeTimezone: \"utc\"` uses UTC.\n* `envelopeTimezone: \"user\"` uses `agents.defaults.userTimezone` (falls back to host timezone).\n* Use an explicit IANA timezone (e.g., `\"Europe/Vienna\"`) for a fixed offset.\n* `envelopeTimestamp: \"off\"` removes absolute timestamps from envelope headers.\n* `envelopeElapsed: \"off\"` removes elapsed time suffixes (the `+2m` style).\n\n### Examples\n\n**Local (default):**",
      "language": "unknown"
    },
    {
      "code": "**Fixed timezone:**",
      "language": "unknown"
    },
    {
      "code": "**Elapsed time:**",
      "language": "unknown"
    },
    {
      "code": "## Tool payloads (raw provider data + normalized fields)\n\nTool calls (`channels.discord.readMessages`, `channels.slack.readMessages`, etc.) return **raw provider timestamps**.\nWe also attach normalized fields for consistency:\n\n* `timestampMs` (UTC epoch milliseconds)\n* `timestampUtc` (ISO 8601 UTC string)\n\nRaw provider fields are preserved.\n\n## User timezone for the system prompt\n\nSet `agents.defaults.userTimezone` to tell the model the user's local time zone. If it is\nunset, OpenClaw resolves the **host timezone at runtime** (no config write).",
      "language": "unknown"
    }
  ],
  "headings": [
    {
      "level": "h2",
      "text": "Message envelopes (local by default)",
      "id": "message-envelopes-(local-by-default)"
    },
    {
      "level": "h3",
      "text": "Examples",
      "id": "examples"
    },
    {
      "level": "h2",
      "text": "Tool payloads (raw provider data + normalized fields)",
      "id": "tool-payloads-(raw-provider-data-+-normalized-fields)"
    },
    {
      "level": "h2",
      "text": "User timezone for the system prompt",
      "id": "user-timezone-for-the-system-prompt"
    }
  ],
  "url": "llms-txt#timezones",
  "links": []
}