This is been reported numerous times over the years, and I still see this issue but it hasn’t really been challenged by users until now.
The default system.timezone is UTC, this is fine. When a user goes to Account → Settings → Localization and sets their desired timezone, it saves but doesn’t change.
If I set the sytstem.timezone to something else via cpcmd scope:set system.timezone America/Chicago
it works, but still the user cannot change their own.
This is an issue because the task scheduler runs at the system timezone, not the user’s timezone.
What’s the point of the Settings → Localization time zone setting? If it doesn’t work, why is it there?
Perhaps it would make more sense to just report to the user on relevant pages what the sytem timezone is and that their detected timezone via javascript is a +/- offset of X and to update their cron job / scheduled tasks accordingly.