%3CLINGO-SUB%20id%3D%22lingo-sub-1165583%22%20slang%3D%22en-US%22%3ECalendaring%20is%20Really%20Hard%20to%20Code%20and%20That%E2%80%99s%20Why%20You%20Were%20An%20Hour%20Late%20to%20that%20Meeting%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1165583%22%20slang%3D%22en-US%22%3E%3CP%3EWriting%20code%20for%20calendaring%20features%20is%20hard.%20Some%20of%20you%20might%20say%20writing%20any%20kind%20of%20code%20is%20hard%2C%20and%20you%20might%20have%20a%20point%2C%20but%20calendaring%20is%20particularly%20tricky.%20Why%E2%80%99s%20that%3F%20Well%2C%20consider%20time%20zones%20for%20a%20start%20%E2%80%93%20a%20meeting%20you%20set%20up%20isn%E2%80%99t%20necessarily%20in%20the%20same%20time%20as%20it%20is%20for%20me%2C%20and%20then%20you%20also%20invited%20people%2C%20from%20a%20whole%20bunch%20of%20other%20time%20zones%20(did%20you%20know%20some%20time%20zones%20are%2030%20mins%20off%2C%20not%20a%20full%20hour%3F)%2C%20and%20then%20you%20made%20the%20meeting%20recurring%2C%20not%20every%20week%2C%20but%20every%20third%20Monday%2C%20except%20for%20next%20month%2C%20when%20it%E2%80%99s%20on%20Tuesday%E2%80%A6%20and%20so%20on%20and%20so%20forth.%20But%20you%20got%20a%20meeting%20set%20up%2C%20all%20good.%3C%2FP%3E%0A%3CP%3EAnd%20then%20one%20of%20the%20attendees%20happens%20to%20live%20in%20a%20country%20that%20decided%20to%20implement%20Daylight%20Saving%20Time%20(DST)%20and%20change%20the%20local%20time%20by%20an%20hour.%20Just%20in%20that%20country.%3C%2FP%3E%0A%3CP%3EAnd%20we%20have%20an%20good%20example%2C%20as%20%3CA%20href%3D%22https%3A%2F%2Fwww.timeanddate.com%2Fnews%2Ftime%2Fbrazil-scraps-dst.html%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3EBrazil%20changed%20their%20DST%20rules%20in%202019%3C%2FA%3E%20to%20eliminate%20DST%20and%20those%20changes%20are%20coming%20up%20very%20soon%20and%20they%20might%20impact%20users%20even%20with%20the%20%3CA%20href%3D%22https%3A%2F%2Fsupport.microsoft.com%2Fen-us%2Fhelp%2F4507704%2Fdst-changes-in-windows-for-brazil-and-morocco%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noopener%20noreferrer%20noopener%20noreferrer%22%3Elatest%20OS%20updates%20applied%3C%2FA%3E.%20Users%20may%20see%20various%20issues%20with%20%22off%20by%20an%20hour%22%20calendar%20items%20when%20using%20the%20Brasilia%20time%20zone.%3C%2FP%3E%0A%3CP%3ESometimes%20we%20get%20caught%20out%20by%20a%20DST%20change%20made%20by%20a%20country%2C%20or%20a%20particular%20change%20needs%20us%20to%20code%20something%20new%20to%20account%20for%20it%2C%20and%20for%20the%20most%20part%20we%20make%20it%20so%20you%20don%E2%80%99t%20notice.%20But%20despite%20our%20best%20efforts%20sometimes%20users%20notice%20meetings%20are%20off%20by%20an%20hour.%20Then%20the%20users%20call%20you%2C%20their%20IT%20Pro%20to%20complain.%3C%2FP%3E%0A%3CP%3EWhat%20do%20you%20do%3F%20There%20are%20a%20number%20of%20things%20we%20recommend%2C%20and%20so%20we%20wanted%20to%20share%20some%20simple%20advice%20on%20what%20to%20do%2C%20if%20it%20happens.%3C%2FP%3E%0A%3CP%3EThe%20%E2%80%9Coff%20by%20one%20hour%E2%80%9D%20issue%20can%20vary%20widely%20in%20terms%20of%20scope%20and%20symptom%2C%20although%20it%20is%20typically%20limited%20to%20%3CSTRONG%3E%3CEM%3Erecurring%20appointments%20and%20meetings%3C%2FEM%3E%3C%2FSTRONG%3E.%20For%20example%2C%20a%20user%20might%20report%3A%3C%2FP%3E%0A%3CUL%3E%0A%3CLI%3EEvery%20single%20recurring%20meeting%20is%20off%20by%20an%20hour%2C%20but%20only%20in%20Outlook%20on%20the%20Web%20(OWA).%26nbsp%3B%20The%20meetings%20render%20correctly%20in%20Outlook%20for%20Windows.%3C%2FLI%3E%0A%3CLI%3EOnly%20a%20few%20meetings%20are%20off%20by%20an%20hour%2C%20but%20they%20show%20incorrectly%20in%20both%20OWA%20and%20in%20Outlook%20for%20Windows.%3C%2FLI%3E%0A%3CLI%3EOnly%20exceptions%20to%20a%20recurring%20meeting%20are%20off%20by%20an%20hour%2C%20and%20only%20for%20attendees%2C%20not%20for%20the%20organizer.%3C%2FLI%3E%0A%3CLI%3EOnly%20existing%20meetings%20that%20were%20created%20BEFORE%20the%20Windows%20Operating%20System%20DST%20patches%20were%20applied%20are%20off%20by%20an%20hour.%3C%2FLI%3E%0A%3CLI%3ESome%20other%20possible%20variation%20of%20meeting%20creation%2C%20attendee%20vs%20organizer%2C%20all%20vs%20some%2C%20OWA%20or%20Outlook%20desktop%2C%20etc.%3C%2FLI%3E%0A%3C%2FUL%3E%0A%3CP%3EThe%20%231%20best%20thing%20you%20can%20do%20to%20avoid%20seeing%20these%20issues%20in%20the%20first%20place%20is%20to%20keep%20your%20client%20software%20and%20operating%20system%20up%20to%20date.%20Sorry%20if%20that%E2%80%99s%20obvious%20to%20you%2C%20but%20the%20OS%20is%20the%20master%20time%20source%20for%20the%20client%20(in%20OWA%E2%80%99s%20case%20that%20means%20Exchange%20Online)%2C%20and%20sometimes%20these%20DST%20patches%20require%20an%20update%20to%20Windows%2FMac%2FLinux%20%E2%80%93%20so%20keep%20them%20patched.%20Sometimes%20we%20need%20to%20patch%20Outlook%20for%20Windows%2C%20Mac%2C%20iOS%20or%20Android%2C%20and%20so%20keeping%20the%20client%20up%20to%20date%20can%20prevent%20these%20issues%20from%20showing%20up.%20There%E2%80%99s%20a%20strong%20case%20to%20be%20made%20here%20for%20switching%20to%20Office%20365%20ProPlus%20and%20having%20updates%20regularly%20applied.%3C%2FP%3E%0A%3CP%3EThese%20DST%20issues%20can%20also%20require%20server-side%20changes.%20Exchange%20Online%20does%20all%20that%20for%20you%2C%20of%20course.%20In%20an%20on-premises%20world%20you%20need%20to%20update%20your%20servers%2C%20so%20make%20sure%20you%20keep%20up%20to%20date%20on%20CUs%20and%20OS%20updates.%3C%2FP%3E%0A%3CP%3EAssuming%20you%E2%80%99ve%20done%20all%20that%2C%20your%20clients%20and%20servers%2Fservices%20are%20up%20to%20date%20%E2%80%93%20what%20then%3F%3C%2FP%3E%0A%3CP%3EYou%20need%20to%20figure%20out%20how%20large%20the%20scope%20of%20this%20issue%20is%20for%20your%20users.%20Is%20it%20every%20user%3F%20Is%20it%20Outlook%20for%20Windows%20only%3F%20What%20about%20OWA%2C%20does%20that%20work%3F%20Because%20the%20easiest%20thing%20might%20be%20to%20have%20the%20user%20switch%20to%20another%20client%20app%20until%20you%20figure%20it%20out.%3C%2FP%3E%0A%3CP%3EIf%20it%E2%80%99s%20only%20a%20subset%20of%20users%20(as%20you%20only%20have%20a%20small%20number%20of%20users%20in%20that%20geography%20where%20DST%20changed%20the%20time)%20perhaps%20you%20decide%20to%20manually%20%E2%80%98fix%E2%80%99%20the%20meetings.%20If%20so%2C%20here%E2%80%99s%20what%20we%20suggest%3B%3C%2FP%3E%0A%3COL%3E%0A%3CLI%3EMake%20sure%20the%20DST%20patches%2Fupdates%20are%20in%20place.%3C%2FLI%3E%0A%3CLI%3EMake%20sure%20you%20note%20any%20existing%20meeting%20exceptions%20that%20might%20exist%20if%20the%20problem%20meeting%20is%20recurring.%3C%2FLI%3E%0A%3CLI%3EHave%20the%20organizer%20cancel%20the%20meeting%20that%20is%20problematic.%3C%2FLI%3E%0A%3CLI%3EHave%20the%20organizer%20create%20and%20send%20a%20new%20meeting%20so%20that%20the%20start%20time%20correctly%20takes%20into%20account%20the%20new%20DST%20rules.%3C%2FLI%3E%0A%3CLI%3ERecreate%20the%20needed%20exceptional%20instances.%3C%2FLI%3E%0A%3C%2FOL%3E%0A%3CP%3EWe%20also%20see%20cases%20where%20users%20%E2%80%98fixed%E2%80%99%20their%20meetings%20ahead%20of%20a%20patch%2Fupdate%20by%20just%20dragging%20them%20to%20the%20%E2%80%98correct%E2%80%99%20start%20time%2C%20which%20then%20results%20in%20them%20breaking%20again%20when%20updates%20are%20installed%20(and%20their%20automatic%20changes%20come%20into%20effect)%20%E2%80%93%20that%E2%80%99s%20confusing%20but%20it%E2%80%99s%20all%20the%20same%20issue.%3C%2FP%3E%0A%3CP%3EWe%20realize%20re-creating%20the%20meeting%20series%20is%20a%20bit%20inconvenient%2C%20but%20that%E2%80%99s%20because%20time%20zone%20rule%20information%20is%20stored%20on%20the%20meeting%20itself%20and%20re-creating%20it%20on%20a%20patched%20machine%20will%20ensure%20the%20correct%20rules%20are%20being%20used%20for%20that%20series.%20And%20it%E2%80%99s%20often%20the%20quickest%20solution.%20But%20what%20if%20the%20impact%20is%20too%20large%20to%20handle%20that%20way%2C%20and%20you%E2%80%99ve%20made%20sure%20your%20clients%20are%20patched%20%E2%80%93%20then%20you%20should%20call%20into%20support%20and%20get%20some%20advice.%3C%2FP%3E%0A%3CP%3EOn%20multiple%20occasions%20we%20have%20made%20service%20side%20changes%20in%20Exchange%20Online%20to%20%E2%80%98fix%E2%80%99%20it%20there.%20Those%20changes%20do%20make%20it%20to%20on-prem%2C%20but%20not%20until%20the%20next%20CU%20typically.%3C%2FP%3E%0A%3CP%3EWe%20give%20you%20a%20lot%20of%20flexibility%20in%20how%20you%20can%20create%20meetings%20(and%20we%20are%20not%20done%20improving%20meetings%20by%20a%20long%20shot)%20but%20it%20sometimes%20feels%20like%20it%E2%80%99s%20something%20of%20a%20minor%20miracle%20any%20of%20us%20ever%20get%20to%20meet%20and%20talk%20to%20each%20other%20at%20all%2C%20it%20really%20is.%20We%20celebrate%20people%20meeting%20every%20day%2C%20and%20we%20work%20really%20hard%20on%20this%20stuff%2C%20all%20the%20time%2C%20to%20make%20sure%20changes%20such%20as%20DST%20are%20accounted%20for.%3C%2FP%3E%0A%3CP%3EWe%E2%80%99re%20working%20on%20the%20Brazilian%20DST%20issue%20very%20hard%20right%20now%2C%20but%20we%20want%20to%20call%20it%20out%20so%20admins%20with%20users%20in%20that%20timezone%20are%20aware%2C%20and%20have%20a%20chance%20to%20make%20sure%20patches%20are%20applied%2C%20users%20are%20aware%20and%20so%20on.%20We%E2%80%99ll%20get%20things%20patched%20and%20fixed%20in%20time%2C%20no%20doubt%2C%20but%20we%20thought%20this%20a%20good%20time%20to%20broadly%20discuss%20DST%2C%20what%20it%20means%2C%20what%20you%20can%20do%2C%20and%20why%20writing%20code%20for%20calendaring%20can%20sometimes%20be%20a%20bit%20hard.%3C%2FP%3E%0A%3CP%3E%3CFONT%20color%3D%22%23FF9900%22%3EThe%20Calendaring%20Team%3C%2FFONT%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-1165583%22%20slang%3D%22en-US%22%3E%3CP%3EWriting%20code%20for%20calendaring%20features%20is%20hard.%20You%20finally%20figure%20out%20a%20good%20time%20for%20your%20team%20to%20meet%20and%20then%20one%20of%20the%20attendees%20happens%20to%20live%20in%20a%20country%20that%20decided%20to%20implement%20Daylight%20Saving%20Time%20(DST)%20and%20change%20the%20local%20time%20by%20an%20hour.%20Just%20in%20that%20country.%20Here's%20some%20advice%20on%20what%20to%20do%20and%20how%20to%20handle%20it.%3C%2FP%3E%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1165583%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3ECalendaring%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EExchange%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EExchange%20Online%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EOffice%20365%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EOutlook%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EOWA%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ETips%20'n%20Tricks%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ETroubleshooting%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E

Writing code for calendaring features is hard. Some of you might say writing any kind of code is hard, and you might have a point, but calendaring is particularly tricky. Why’s that? Well, consider time zones for a start – a meeting you set up isn’t necessarily in the same time as it is for me, and then you also invited people, from a whole bunch of other time zones (did you know some time zones are 30 mins off, not a full hour?), and then you made the meeting recurring, not every week, but every third Monday, except for next month, when it’s on Tuesday… and so on and so forth. But you got a meeting set up, all good.

And then one of the attendees happens to live in a country that decided to implement Daylight Saving Time (DST) and change the local time by an hour. Just in that country.

And we have an good example, as Brazil changed their DST rules in 2019 to eliminate DST and those changes are coming up very soon and they might impact users even with the latest OS updates applied. Users may see various issues with "off by an hour" calendar items when using the Brasilia time zone.

Sometimes we get caught out by a DST change made by a country, or a particular change needs us to code something new to account for it, and for the most part we make it so you don’t notice. But despite our best efforts sometimes users notice meetings are off by an hour. Then the users call you, their IT Pro to complain.

What do you do? There are a number of things we recommend, and so we wanted to share some simple advice on what to do, if it happens.

The “off by one hour” issue can vary widely in terms of scope and symptom, although it is typically limited to recurring appointments and meetings. For example, a user might report:

  • Every single recurring meeting is off by an hour, but only in Outlook on the Web (OWA).  The meetings render correctly in Outlook for Windows.
  • Only a few meetings are off by an hour, but they show incorrectly in both OWA and in Outlook for Windows.
  • Only exceptions to a recurring meeting are off by an hour, and only for attendees, not for the organizer.
  • Only existing meetings that were created BEFORE the Windows Operating System DST patches were applied are off by an hour.
  • Some other possible variation of meeting creation, attendee vs organizer, all vs some, OWA or Outlook desktop, etc.

The #1 best thing you can do to avoid seeing these issues in the first place is to keep your client software and operating system up to date. Sorry if that’s obvious to you, but the OS is the master time source for the client (in OWA’s case that means Exchange Online), and sometimes these DST patches require an update to Windows/Mac/Linux – so keep them patched. Sometimes we need to patch Outlook for Windows, Mac, iOS or Android, and so keeping the client up to date can prevent these issues from showing up. There’s a strong case to be made here for switching to Office 365 ProPlus and having updates regularly applied.

These DST issues can also require server-side changes. Exchange Online does all that for you, of course. In an on-premises world you need to update your servers, so make sure you keep up to date on CUs and OS updates.

Assuming you’ve done all that, your clients and servers/services are up to date – what then?

You need to figure out how large the scope of this issue is for your users. Is it every user? Is it Outlook for Windows only? What about OWA, does that work? Because the easiest thing might be to have the user switch to another client app until you figure it out.

If it’s only a subset of users (as you only have a small number of users in that geography where DST changed the time) perhaps you decide to manually ‘fix’ the meetings. If so, here’s what we suggest;

  1. Make sure the DST patches/updates are in place.
  2. Make sure you note any existing meeting exceptions that might exist if the problem meeting is recurring.
  3. Have the organizer cancel the meeting that is problematic.
  4. Have the organizer create and send a new meeting so that the start time correctly takes into account the new DST rules.
  5. Recreate the needed exceptional instances.

We also see cases where users ‘fixed’ their meetings ahead of a patch/update by just dragging them to the ‘correct’ start time, which then results in them breaking again when updates are installed (and their automatic changes come into effect) – that’s confusing but it’s all the same issue.

We realize re-creating the meeting series is a bit inconvenient, but that’s because time zone rule information is stored on the meeting itself and re-creating it on a patched machine will ensure the correct rules are being used for that series. And it’s often the quickest solution. But what if the impact is too large to handle that way, and you’ve made sure your clients are patched – then you should call into support and get some advice.

On multiple occasions we have made service side changes in Exchange Online to ‘fix’ it there. Those changes do make it to on-prem, but not until the next CU typically.

We give you a lot of flexibility in how you can create meetings (and we are not done improving meetings by a long shot) but it sometimes feels like it’s something of a minor miracle any of us ever get to meet and talk to each other at all, it really is. We celebrate people meeting every day, and we work really hard on this stuff, all the time, to make sure changes such as DST are accounted for.

We’re working on the Brazilian DST issue very hard right now, but we want to call it out so admins with users in that timezone are aware, and have a chance to make sure patches are applied, users are aware and so on. We’ll get things patched and fixed in time, no doubt, but we thought this a good time to broadly discuss DST, what it means, what you can do, and why writing code for calendaring can sometimes be a bit hard.

The Calendaring Team