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

opened29d agobyWWizhill05

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).

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.

Synced from GitHub

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.

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.

Synced from GitHub

Checked on current main (70e5e384da) 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