1 of 2

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 TZ in .profile or .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 TZ in ~/.profile or ~/.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 ~/.bash_profile:

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.