{ "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": [] }