You don't say how you set the timezone, but since you set it for your own user, that has to be by setting the
TZ variable. Bash (like most programs) only reads the
TZ environment variable once when it starts up. That's usually not an issue, but it does mean that if you set
.bashrc, then any time value shown by this instance of bash will be in the system timezone and not in the timezone indicated by the
TZ environment variable.
As far as I know there is no way to tell bash to change its timezone setting. So first, make sure that you set
~/.bash_profile, like any other environment variable, and not in
~/.bashrc. Then, once you've set
TZ, tell bash to re-invoke itself. Make sure not to do that forever: only re-invoke bash if you've changed
TZ. You presumably don't care about non-interactive login shells here, so only re-invoke bash if it's interactive. Try this in your
reload_if_interactive= if [[ -z $TZ ]]; then reload_if_interactive=t export TZ=Continent/City fi if [[ -n $reload_if_interactive && $- = *i* ]]; then exec bash --login fi
Alternatively, use zsh, where changing
TZ takes effect immediately.