How Microsoft Teams Displays Local Time in Profile Cards

Teams Local Time a Useful Feature Dependent on Exchange Calendar Settings

On February 14, Microsoft updated the Teams profile card to display the profile owner’s local time and the time difference between you and them. To see a profile card, hover over a user’s thumbnail photo anywhere they appear in Teams, like a chat or channel conversation. As you can see in Figure 1, the local time for the chosen person and the difference to your time appear.

Local time information appears on a Teams profile card
Figure 1: Local time information appears on a Teams profile card

Obviously, if you’re trying to contact someone or arrange a meeting with them, knowing when they work is valuable information. It’s also a feature requested several times in the Teams feedback forum (here’s one example).

Administrators don’t have to do anything to make local time appear in profile cards. Like other information shown in the profile card, the local time depends on information already known about users. In this case, the working hours defined for user calendars. Apart from tenant accounts, local time information is also displayed for guest accounts, if an Exchange Online organization relationship exists to share calendar information between the tenant and the guest’s home domain. Local time information is not available for federated chat including chats with Teams consumer users.

Puzzled by Time Zones

All of this is wonderful until I saw some puzzling results, like people showing up as being in odd time zones or with time differences that just didn’t work. Take the local time shown for Vasil Michev’s guest account (Figure 2). I am in Dublin, Ireland and Vasil is in Sofia, Bulgaria. At 9:51am, Teams told me that Vasil’s local time was 07:51am and that he is two hours behind me. In other words, his time zone is somewhere in the mid-Atlantic. This is upsetting, because the technical editor for the Office 365 for IT Pros eBook shouldn’t be stuck in mid-ocean.

Teams displays an interesting local time zone for a Bulgarian user
Figure 2: Teams displays an interesting local time zone for a Bulgarian user

Why would someone’s time zone be four hours off? To answer the question, we need to know where Teams obtains its time zone information.

Two Time Zones for Outlook

It’s logical that Teams would use someone’s location to determine their time zone. Looking at the data, it seems OK.

Get-User -Identity Vasil.Michev | fl city, stateorprovince, countryorregion

City            : Sofia
StateOrProvince : Sofia
CountryOrRegion : Bulgaria

However, when you think about things a little more, mailboxes have a regional configuration. Perhaps this is where Teams fetches the time zone from. The problem with this theory is that guest accounts have only special cloud-only mailboxes used to store compliance records and other system data. You can’t query these mailboxes using the Get-MailboxRegionalConfiguration cmdlet, like you can for tenant mailboxes:

Get-MailboxRegionalConfiguration -Identity Ken.Bowers | fl

DateFormat                            : dd/MM/yyyy
Language                              : en-GB
DefaultFolderNameMatchingUserLanguage : False
TimeFormat                            : HH:mm
TimeZone                              : Eastern Standard Time

The answer therefore must be data that remote tenants can access, such as the calendar configuration. Each calendar has a time zone for working hours, which is used when scheduling meetings and to publish free/busy information. Organizations can share free/busy data with other Microsoft 365 tenants, and as it turns out, this is the data used by Teams.

Users can set the time zone for their calendar through Outlook or OWA settings. OWA is more intelligent about time zone settings than Outlook desktop is and detects if a difference exists between the regional time zone configured in the General tab and the calendar time zone. In Figure 3, we see that OWA offers to fix a mismatch detected between a user’s regional time zone (Eastern Standard Time or UTC -5) and  the time zone for their calendar meeting hours (UTC).

OWA calendar settings detect a time zone mismatch
Figure 3: OWA calendar settings detect a time zone mismatch

Although the two time zones are usually the same, they don’t need to be. By default, the time zone for the calendar is set to the tenant time zone during the creation of a new mailbox. Afterwards, the user can update the time zone to match their location, or an administrator can update the time zone using the Set-MailboxCalendarConfiguration cmdlet. For example:

Set-MailboxCalendarConfiguration -Identity Nikki.Patia -WorkingHoursTimeZone "FLE Standard Time"

Like any change to a mailbox or account setting, it can take some time before Teams clients refresh their cache to pick up the change. In testing, I found it could take several days before Teams reflected calendar adjustments in profile cards.

Checking Calendar Settings

Apart from running the Get-MailboxCalendarConfiguration cmdlet, administrators can use the Graph Explorer to check calendar settings for a user by running a Calendar API query, which is how Teams fetches user time zone information.

To run the query, open the Graph Explorer and sign into your account. In the request body, enter the request you want the Graph to process. In this case, we want to know about the calendar settings for two users defined in the schedules section. The start and end time can be any date.

{
    "schedules": [
        "jane.smith@office365itpros.com",
        "john.hopper@office365itpros.com"
    ],
    "startTime": {
        "dateTime": "2023-03-15T09:00:00",
        "timeZone": "GMT Standard Time"
    },
    "endTime": {
        "dateTime": "2023-03-15T18:00:00",
        "timeZone": "GMT Standard Time"
    },
    "availabilityViewInterval": 60
}

After populating the request body, run this POST query:

https://graph.microsoft.com/v1.0/me/calendar/getSchedule

The response gives the availability of the users for the requested time slot. However, we’re interested only in the time zone included in the response for each user. In this instance, we see that the user’s calendar time zone is Eastern Standard Time.

                ],
                "startTime": "08:00:00.0000000",
                "endTime": "17:00:00.0000000",
                "timeZone": {
                    "name": "Eastern Standard Time"
                }

We started off by reporting problems with the profile card for Vasil Michev’s guest account. My tenant has an Exchange Online federated relationship with Vasil’s tenant, so we can use the Calendar API to perform a free/busy lookup. This is how the Outlook scheduling assistant finds free time slots for meetings.

The lookup returned the following result shows that Vasil’s calendar uses a custom time zone to apply a four-hour time offset from UTC. This is why his profile card reports such an odd local time.

"startTime": "09:00:00.0000000",
                "endTime": "18:00:00.0000000",
                "timeZone": {
                    "@odata.type": "#microsoft.graph.customTimeZone",
                    "bias": -120,
                    "name": "Customized Time Zone",
                    "standardOffset": {
                        "time": "04:00:00.0000000",
                        "dayOccurrence": 5,
                        "dayOfWeek": "sunday",
                        "month": 10,
                        "year": 0

You might decide that it’s up to users to make sure that their calendars have the correct time zones set and administrators have no part to play to ensure no mismatches exist. However, if you decide that you’d like to know if any mailboxes have mismatched time zones, we can detect the condition with some PowerShell code. The script below:

  • Fetches user mailboxes.
  • Checks the regional configuration to get the time zone set for the user location.
  • Checks the calendar configuration to get the time zone set for meeting hours.
  • Checks the user account properties to get their physical address.
  • Reports any mismatches found between the two time zones.

$ModulesLoaded = Get-Module | Select Name
If (!($ModulesLoaded -match "ExchangeOnlineManagement")) {Write-Host "Please connect to the Exchange Online Management module and then restart the script"; break}
Write-Host "Finding user mailboxes..."
# OK, we seem to be fully connected and ready to go...
[array]$Mbx = Get-ExoMailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited
If (!($Mbx)) { Write-Host "Something happened and we found no user mailboxes - exiting" ; break }

$Report = [System.Collections.Generic.List[Object]]::new()
ForEach ($M in $Mbx) {
   Write-Host "Processing" $M.DisplayName
   $RegionalConfiguration = Get-MailboxRegionalConfiguration -Identity $M.UserPrincipalName
   $CalendarConfiguration = Get-MailboxCalendarConfiguration -Identity $M.UserPrincipalName
   $UserInfo = Get-User -Identity $M.UserPrincipalName
   $Status = $Null
   If ($CalendarConfiguration.WorkingHoursTimeZone -ne $RegionalConfiguration.TimeZone) {$Status = "Time zone mismatch"}

   $DataLine= [PSCustomObject][Ordered]@{ 
        Status          = $Status
        User            = $M.DisplayName
        UPN             = $M.UserPrincipalName
        CalendarZone    = $CalendarConfiguration.WorkingHoursTimeZone
        RegionalZone    = $RegionalConfiguration.TimeZone
        Language        = $RegionalConfiguration.Language
        DateFormat      = $RegionalConfiguration.DateFormat
        TimeFormat      = $RegionalConfiguration.TimeFormat
        Office          = $UserInfo.Office
        StreetAddress   = $UserInfo.StreetAddress
        City            = $UserInfo.City
        StateOrProvince = $UserInfo.StateOrProvince
        CountryOrRegion = $UserInfo.CountryOrRegion
        PostalCode      = $UserInfo.PostalCode
      
    }
    $Report.Add($DataLine)
}
$Report | Out-GridView

Figure 4 shows example output from the script.

Time zone mismatches reported by PowerShell
Figure 4: Time zone mismatches reported by PowerShell

The cmdlets to fetch regional and calendar configurations are not quick and the script can take between ten and fifteen seconds to process a mailbox. In fact, this is a great example of an Exchange Online script suitable for processing by Azure Automation.

Adjustments Best Left to Users

Although it would be easy to insert an extra line of PowerShell to fix time zone mismatches by adjusting the calendar time zone to match the regional time zone, that’s a call better left to users. They know their calendar and they know how they work. But with the information to hand, you can advise users with mismatched time zones to update their settings as necessary to make sure that Teams profile cards reflect accurate data. After all, you wouldn’t want people to see bad local times, would you?


Insight like this doesn’t come easily. You’ve got to know the technology and understand how to look behind the scenes. Benefit from the knowledge and experience of the Office 365 for IT Pros team by subscribing to the best eBook covering Office 365 and the wider Microsoft 365 ecosystem.

23 Replies to “How Microsoft Teams Displays Local Time in Profile Cards”

  1. Very interesting read! Thanks for digging into it.
    Do you have any information about hybrid environments? The feature can only be seen by EXO users but when I as an EXO user lookup and on-premises user, they have always the same time zone (UTC-1) regardless of any of the above settings (should be UTC+1, W. Europe). Wondering if there is another setting for these users or MS just forgot them.

    1. Teams fetches the information from the mailbox time zone, so I assume this works fine with hybrid mailboxes. You can test it easily by using the Graph Explorer to query a hybrid mailbox. Try this and let us know what you find, and if necessary, I will go back to Microsoft and ask how hybrid mailboxes are dealt with.

      1. We are having a similar issue in which our EXO users are showing 8 hours behind on-prem users in the Teams card. Powershell shows that the regional and calendar configurations for the on-prem mailboxes are set to the same Timezone as our EXO mailboxes. However MS Graph tells a different story. It shows a customTimeZone with a standardOffset of time”: “02:00:00.0000000”. I have a ticket open with support, but I’m not getting anywhere fast. Any insight would be great.

      2. It’s an issue I was never able to completely chase down because it was inconsistent – progressing it through the support route is probably the best approach at this point.

      3. Hi Tony,

        MS Support “fixed” the issue by disabling the time zone lookup on the Loki server (which manages the contact card information) for on-prem users. This was on 04/27/2022 and I’m not certain if this was just for our tenant or for all. We no longer see any time zone details in the contact card for Exchange on prem users since the change. Just thought that I would update the status.

      4. Thanks. It’s probably a tenant-specific fix as I don’t think support can disable something like this for all of Microsoft 365. They’ve probably referred the case to engineering for final resolution.

      5. I can confirm the same. For our tenant the time zone information is also not shown anymore for on-premises user. Seems to be a permanent fix for all.
        Thanks Simon for doing the Graph check, I wasn’t able to use Graph due to restrictions in our tenant.

  2. Some user’s are telling me they are not seeing this option in Teams but I do! Anything I can check to make sure this is enabled?

      1. Hi Tony
        I think this feature is only live in Public Preview as it does not work for my normal user.

      2. @Justin It’s also GA and not only public preview. Also to mention, we see that if the user who opens the profile card has the mailbox on-prem he/she cannot see the time zone from other people at all – no matter where their mailbox is located.

      1. can that be manually changed? or do i change my laptop time? its just sometimes i do home office from abroad and i am not too keen on people finding out. not happy with this update

  3. Thanks a lot for your clarification.
    We had user with the following time zone in the MailboxCalaendarConfiguration: tzone://Microsoft/Custom.

    All other time zones are correct, so the user don’t see anything wrong up to the timezone of some co-workers. After change their timezone to the correct one, the time of teams displayed to other works fine.

    Best regards,
    Frank

  4. Hello,
    Some users intermittently report being ahead or behind colleagues timezone according to Teams profile card. While in practice they didn’t change their Outlook timezone. Is there a reason for that?

    Thx

  5. Thanks for this information. I would like to bring field detail shown —? 5″30a, you are 5 hrs Ahead” to an other system. is it possible?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.