MacOS Contacts with Office365 / Exchange birthday one day off
Hi,
numerous tickets exist surrounding the topic of contacts birthdays being one day off when using Office 365 or Exchange with MacOS (it has been fixed in IOS now).
Please, Apple, can you finally look into this? A detailed Bug report follows below...
DESCRIPTION
When using MacOS Contacts App with Microsoft Office365 birthdays are - depending on the users timezone - one day off.
Google lists tons of other persons having the same problem since many years.
In IOS this has been fixed recently.
This is not a Microsoft bug, but a bug in MacOS Contacts App, more specifically the implementation of Exchange Webservices protocol in MacOS.
A Microsoft ticket *** had been opened previously, which confirms our findings below.
Steps to reproduce
Prerequisites
- use a MacOS and IOS devices that has it's timezone set to Central European Timezone (CET / GMT+1) (or any other timezone east of GMT)
- setup an Microsoft Office 365 contact account (or MS Exchange)
(We are using Mac OS 11.5.1 and IOS 14.6 both set to CET/CEST)
Case 1
- create a contact in MacOS Contacts App hosted on Office365 with a birthday set to 01.01.2020
- when synced, this contact will show up in IOS, Outlook for Web and Outlook for Mac as 31.12.2019
Case 2
- create a contact in IOS, Outlook for Web or Outlook for Mac with a birthday set to 01.01.2020
- when synced, this contact will show up in IOS, Outlook for Web and Outlook for Mac correctly, but in MacOS Contacts App, it will show as 02.01.2020
Background
MacOS uses the Exchange Web Services protocol (EWS).
IOS uses Exchange ActiveSync protocol (EAS).
Outlook for Mac uses EWS.
In both, EWS and EAS, the birthday field is designated as DateTime with Timezone, but it is to be interpreted without the time and timezone.
MacOS Contacts App is interpreting the time and timezone.
IOS and Outlook for Mac are (correctly) disregarding the time and timezone.
MacOS converts the birthday according to the systems timezone into GMT (i.e. when system is GMT+1, a birthday of 01.01.2020 will become 31.12.2019T23:00:00Z)
IOS will always transmit the birthday as the actual date that was entered suffixed with 00:00:00.000Z.
Outlook for Mac will always transmit the birthday as the actual date that was entered suffixed with 11:59:00Z
Evolution in Gnome used to have the same bug (now fixed): https://gitlab.gnome.org/GNOME/evolution-ews/-/issues/57
Additional information
We have intercepted the SSL traffic from IOS, MacOS Contacts App and Outlook for Mac to gain some further insights.
In each, IOS Contacts, MacOs Contacts and Outlook for Mac a new contact was created with its birthday set to 01.01.2020.
Unfortunately, the full logs cannot be attached (probably because they are in XML).
The contacts birthday is being transmitted to Exchange....
- from IOS: <Birthday>2020-01-01T00:00:00.000Z</Birthday>
- from MacOS Contacts: <t:Birthday>2019-12-31T23:00:00Z</t:Birthday>
- from Outlook for Mac: <t:Birthday>2020-01-01T11:59:00Z</t:Birthday>
Proposed Solution
According to Microsofts MAPI, EAS and EWS documentation, the time and timezone is to be disregarded.
In MacOS Contacts App, when using Exchange Web Services, birthday and anniversary fields should
- NOT be converted according to the users timezone before sending them to the server, but instead be suffixed with T00:00:00.000Z or T11:59:00Z
- be read as is, when receiving a contact with a birthday from the server, and NOT convert it to the users timezone.
[Personal Information Edited by Moderator]
MacBook Pro 16″, macOS 11.5