Microsoft Teams and Exchange logos

Teams time zone wrong? Why colleagues show as “unavailable”

At a Microsoft 365 Business Standard customer, employees reported that colleagues appeared as “unavailable” for most of the day in Scheduling Assistant. A Teams profile card also said, “Their time zone is 9 hours ahead”, even though everyone worked in the same office in Germany.

The cause was a mailbox setting you can’t see in the Exchange admin center: the time zone that calendar working hours are interpreted in.

Two time zones with different roles

Exchange stores a mailbox’s regional time zone and a separate time zone for calendar working hours. Get-MailboxCalendarConfiguration returns properties such as WorkingHoursStartTime, WorkingHoursEndTime, and WorkingHoursTimeZone. That time zone explicitly applies to the start and end of working hours. The regional setting can be inspected separately with Get-MailboxRegionalConfiguration.

Setting Cmdlet / property Purpose
Mailbox regional time zone Get-MailboxRegionalConfiguration (TimeZone) Regional calendar and display settings for the mailbox
Working-hours time zone Get-MailboxCalendarConfiguration (WorkingHoursTimeZone) Time zone used to interpret the start and end of working hours

For the affected users, the mailbox regional time zone was correctly set to “W. Europe Standard Time”. However, WorkingHoursTimeZone was set to “Pacific Standard Time”. Their working hours were entered as 08:00 to 17:00, but interpreted in the US West Coast time zone. In Germany, those hours therefore fell mostly in the evening and overnight.

Outlook and Teams show these working hours as part of the “work plan”. So when displayed availability doesn’t match the real workday, this setting is worth a look. It is not the only possible cause, though.

Connect and inspect one mailbox

The following examples use the Exchange Online PowerShell module. Sign in with an account that has the required Exchange permissions.

Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline

Start by checking one affected mailbox:

$identity = '[email protected]'

Get-MailboxRegionalConfiguration -Identity $identity |
  Format-List TimeZone, Language

Get-MailboxCalendarConfiguration -Identity $identity |
  Format-List WorkingHoursTimeZone, WorkingHoursStartTime, WorkingHoursEndTime

Check working hours for all user mailboxes

The report reads all user mailboxes and only lists those whose working-hours time zone differs from the target. It changes nothing. I then use the CSV as a checklist.

$targetTimeZone = 'W. Europe Standard Time'
$mailboxes = Get-EXOMailbox -RecipientTypeDetails UserMailbox `
  -ResultSize Unlimited -Properties UserPrincipalName

$report = foreach ($mailbox in $mailboxes) {
  $calendar = Get-MailboxCalendarConfiguration -Identity $mailbox.UserPrincipalName
  $currentTimeZone = [string]$calendar.WorkingHoursTimeZone

  if ($currentTimeZone -ne $targetTimeZone) {
    [PSCustomObject]@{
      UserPrincipalName = $mailbox.UserPrincipalName
      CurrentTimeZone   = $currentTimeZone
      TargetTimeZone    = $targetTimeZone
      WorkingHoursStart = $calendar.WorkingHoursStartTime
      WorkingHoursEnd   = $calendar.WorkingHoursEndTime
    }
  }
}

$report | Format-Table -AutoSize
$report | Export-Csv -Path './working-hours-timezones.csv' `
  -NoTypeInformation -Encoding utf8

[string] makes the comparison work even if the PowerShell session returns the property as an Exchange time-zone object. Review the report before making any changes. Shared, room, and equipment mailboxes are not included because this query explicitly selects UserMailbox.

Apply changes only after review

First test the correction on one user, then verify that user’s calendar and availability. Set-MailboxCalendarConfiguration accepts WorkingHoursTimeZone; “W. Europe Standard Time” is the Central European time-zone key with automatic daylight-saving transitions.

$identity = '[email protected]'

Set-MailboxCalendarConfiguration -Identity $identity `
  -WorkingHoursTimeZone 'W. Europe Standard Time' -WhatIf

-WhatIf first displays the planned change. Once the test case and preview look correct, remove -WhatIf for that single test. For other users, use only entries you reviewed in the CSV, exclude exceptions (such as employees who work in another time zone), and preview those changes with -WhatIf too. Remove -WhatIf and run the change only after this review. I wouldn’t blindly change every mailbox.

This changes only the time zone in which working hours are interpreted; the 08:00 to 17:00 hours remain as entered. Afterward, also check that the mailbox regional time zone matches the user’s work location.

After the change

Check the values again with Get-MailboxCalendarConfiguration. Outlook and Teams may cache profile information, so the display can take some time to refresh. To compare, try Teams in a browser or reopen the profile card later.

Also confirm that the calendar time zone matches the actual work location. Employees who intentionally work in another time zone must not be switched to Central Europe in bulk.

In short

If Teams or Outlook show working hours shifted by several hours, compare TimeZone and WorkingHoursTimeZone first. In this case it was a single wrong value per mailbox. Run the report, test one user with -WhatIf, then do the rest.

Microsoft documentation

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *