Skip to content

scheduler: scheduled task times shown in UTC instead of local/system time (IST) #18632

Open

Description

@Wizhill05

Summary

Scheduled task times are displayed in UTC instead of the user's local/system time (IST in my case), with no timezone label. This makes the schedule confusing — a task showing "Daily at 16:31" with "Next run in 5h" while local time is already 16:34.

Environment

  • T3 Code version: 0.0.46-nightly.20261003.2632
  • VM OS: Linux 7.0.0-1014-azure (Ubuntu, x64)
  • VM timezone: Etc/UTC (date → Mon Oct 12 11:06:48 UTC 2026, timedatectl → Time zone: Etc/UTC)
  • Local/system time: 16:34, 12-10-2026 (IST, UTC+5:30 — matches 11:04 UTC on VM)
  • Install/channel: nightly via t3code.service

Reproduction

  1. Be in a timezone ahead of UTC (e.g. IST, UTC+5:30) while the T3 Code backend/VM runs on UTC.
  2. Create a daily scheduled task (e.g. named "Astra Evening" with prompt to check active t3 code threads).
  3. Observe the schedule label in the scheduled-tasks UI: Daily at 16:31 · Next run in 5h while local system time is 16:34, 12-10-2026.

Expected Behavior

Schedule times should be shown in the user's local/system (browser) timezone — or at minimum labeled with the timezone (e.g. "Daily at 16:31 UTC" / "Daily at 22:01 IST"). A daily task set for 16:31 local time that has just passed should show "Next run in ~24h", not "5h".

Actual Behavior

Time appears to be rendered in UTC (VM time) without a timezone indicator:

  • Local: 16:34 IST (= 11:04 UTC)
  • Displayed: Daily at 16:31 · Next run in 5h
  • 16:31 UTC = 22:01 IST, which is ~5.5h after 16:34 IST — matching the "Next run in 5h" countdown. So "16:31" is UTC, not local time.
  • If "16:31" were local (IST) and now is 16:34 IST, next run should be ~24h away, not 5h.

The user suspects this is because the VM's clock (UTC) differs from their machine's clock (IST), but the UI should still show times in system/local time.

Additional Context

  • Screenshots (attached in original report): one showing system clock 16:34 / 12-10-2026, one showing the task row Astra Evening / Daily at 16:31 · Next run in 5h.
  • Frequency: consistent.
  • Suggested fix: render schedule times in the client's local timezone (or respect a user timezone setting) and always include the timezone abbreviation/offset in the label, e.g. Daily at 22:01 IST (16:31 UTC).

Activity

  1. Wizhill05 commented on Oct 12, 2026

    @Wizhill05
    Author

    Screenshots from the original report:

    1. System clock (local, IST): 16:34, 12-10-2026
    system clock showing 16:34 12-10-2026

    2. Scheduled task row showing UTC time: "Daily at 16:31 · Next run in 5h"
    scheduled task Astra Evening - Daily at 16:31, Next run in 5h

  2. juliusmarminge commented on Oct 12, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Accepting this as a bug, but a narrower one than reported: the missing label is the bug, not the timezone the schedule runs in.

    On main, fixed-time schedules run in the server's local timezone. ScheduledTaskService computes the next run from DateTime.nowInCurrentZone on the server, and nextScheduledRunAt sets the wall-clock timeOfDay in that zone. On a UTC VM, "16:31" means 16:31 UTC, so "Next run in 5h" is correct. There's no timezone setting.

    What's wrong is that nothing tells you that. The Run at time picker and the Daily at 16:31 label show the raw timeOfDay with no zone. When the client and server are in different zones, you end up scheduling in a zone you can't see.

    The fix in scope is to show the server's timezone in the picker and the label (for example Daily at 16:31 UTC). Converting schedules to the client's timezone, or adding a per-task timezone, would change how schedules behave, so that should be an Ideas discussion.

    Workaround for now: enter times in the VM's timezone (UTC). For 16:31 IST, use 11:01.

  3. added
    acceptedfeature request accepted
    bugSomething is broken or behaving incorrectly.
    via-triageFiled through npx t3 triage
    on Oct 12, 2026
  4. voida6 commented on Oct 21, 2026

    @voida6
    Contributor

    Correction: I first wrote that #18653 had fixed this on web. It was reverted the same day in #22230, so main has no timeZone on the scheduled-task list and no zone on web or mobile. #18632 is still fully open.

    From the revert, the full IANA name on every label ("Weekdays at 09:00 America/Los_Angeles") was too long for the automations panel. Before writing anything, what would you like?

    • Format: a short abbreviation ("UTC", "PDT") or a UTC offset.
    • When: always, or only when the server's zone differs from the client's.
    • Where: the "Run at" picker only, or the list rows too.
  5. juliusmarminge commented on Oct 21, 2026

    @juliusmarminge
    Member

    Tested current main 70e5e384da with an isolated Linux dev server and the real web client. In Settings → Scheduled Tasks, created a daily 16:31 task. At 22:31 UTC the row read Daily at 16:31 · Next run in 18h, with no timezone label. Both the browser and server report UTC, so this confirms the missing label but does not verify the IST/browser versus UTC/server mismatch. The available browser tools cannot change the browser timezone.

    Can you check on a current build from your IST client and share the schedule row and next-run countdown, plus whether the task was created in the Run at picker or by an agent? The original report is from an older nightly; the earlier labeling fix was subsequently reverted in #22230. Leaving this open for that cross-timezone check.

    Current main UTC browser daily schedule without a timezone label

  6. voida6 commented on Oct 21, 2026

    @voida6
    Contributor

    Checked on current main (70e5e38) with the server and browser in different zones: server started with TZ=UTC, browser in Australia/Sydney (UTC+11, AEDT).

    At browser time Thu 22 Oct 10:07 (server time 21 Oct 23:07 UTC), I created a daily task in Settings > Scheduled Tasks with the Run at picker, set to 13:10 (about 3 hours ahead on the browser clock).

    • Picker: shows 01:10 PM (browser locale), no timezone.
    • Row: Daily at 13:10 · Next run in 14h. The label has no timezone and uses 24-hour format, unlike the picker.
    • 14h matches 13:10 UTC on the server, not 13:10 Sydney (which would read about 3h).

    So the row and picker are the same wall-clock number with no zone, and the countdown is the only hint the zone differs. Created via the picker only; I did not test an agent-created task.

    Row:

    Daily at 13:10, next run in 14h

    Picker:

    Run at 01:10 PM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    acceptedfeature request acceptedbugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions