How rebase appointments using Microsoft Office Outlook Tool: Time Zone Data Update Tool for Microsoft Office Outlook.

I used appointments and envirement mentioned in Update for Russian Time Zone Changes 2014 and Exchange (How auto-adjustment works)

As some of our colleagues still use legacy clients we can try to resolve this issue by using Microsoft Office Outlook Tool: Time Zone Data Update Tool for Microsoft Office Outlook 2010 64-bit I didn't find version for Outlook 2013 (for Outlook 2010 32bit and legacy versions and possiblu for 2013 32x)

First attempt: Try to move user to the new TZ:

Tool found 6 appointments

Here is log with details:

[Original Time Zone]

(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2)

 

[New Time Zone]

(UTC+03:00) Moscow, St. Petersburg, Volgograd (RTZ 2) (Update)

 

[Time Zone Update Log]

Type: Meeting

ID: 040000008200e00074c5b7101a82e00800000000f03d1461bbd0cf01000000000000000010000000aa51f5623a26174d859f60e320ad65fe

Subject: User2010@OWA2010 15:00

Old Start Time: Tuesday, December 2, 2014 11:00:00 AM

New Start Time: Tuesday, December 2, 2014 12:00:00 PM

Old End Time: Tuesday, December 2, 2014 12:00:00 PM

New End Time: Tuesday, December 2, 2014 1:00:00 PM

Recurring: Yes

Result: Success

 

Type: Meeting

ID: 040000008200e00074c5b7101a82e00800000000504a16dcdad0cf0100000000000000001000000057b25eceaa079d4d92eacebf16bd8f49

Subject: User2010@Outlook2010 12:00

Old Start Time: Tuesday, December 2, 2014 8:00:00 AM

New Start Time: Tuesday, December 2, 2014 9:00:00 AM

Old End Time: Tuesday, December 2, 2014 9:00:00 AM

New End Time: Tuesday, December 2, 2014 10:00:00 AM

Recurring: Yes

Result: Success

 

Type: Meeting

ID: 040000008200e00074c5b7101a82e00800000000ce35713bbbd0cf01000000000000000010000000095ddfdd19ccdb40bc0fa284fe2025f3

Subject: User2010@OWA2010 15:00

Old Start Time: Tuesday, November 4, 2014 11:00:00 AM

New Start Time: Tuesday, November 4, 2014 12:00:00 PM

Old End Time: Tuesday, November 4, 2014 12:00:00 PM

New End Time: Tuesday, November 4, 2014 1:00:00 PM

Recurring: No

Result: Success

 

Type: Meeting

ID: 040000008200e00074c5b7101a82e00800000000e086abb2d9d0cf0100000000000000001000000045f49c81cbae284e838ee937d3e6bddd

Subject: User2010@Outlook2010 12:00

Old Start Time: Tuesday, November 4, 2014 8:00:00 AM

New Start Time: Tuesday, November 4, 2014 9:00:00 AM

Old End Time: Tuesday, November 4, 2014 9:00:00 AM

New End Time: Tuesday, November 4, 2014 10:00:00 AM

Recurring: No

Result: Success

 

Type: Meeting

ID: 040000008200e00074c5b7101a82e008000000000dab4c7ebbd0cf010000000000000000100000000dfcacc47e1592478ebc26e8f31d36f8

Subject: User2010@OWA2010 15:00

Old Start Time: Tuesday, October 14, 2014 11:00:00 AM

New Start Time: Tuesday, October 14, 2014 11:00:00 AM

Old End Time: Tuesday, October 14, 2014 12:00:00 PM

New End Time: Tuesday, October 14, 2014 12:00:00 PM

Recurring: Yes

Result: Success

 

Type: Meeting

ID: 040000008200e00074c5b7101a82e0080000000080c7ffaedad0cf010000000000000000100000007af4d49f3ef2944887245843eccafd92

Subject: User2010@Outlook2010 12:00

Old Start Time: Tuesday, October 14, 2014 8:00:00 AM

New Start Time: Tuesday, October 14, 2014 8:00:00 AM

Old End Time: Tuesday, October 14, 2014 9:00:00 AM

New End Time: Tuesday, October 14, 2014 9:00:00 AM

Recurring: Yes

Result: Success

 

Result: Success

 

Okay, also we sent batch updates to other users:

In User2010’s calendar, everything is fine (BTW if we do same with Outlook 2010 for User2013 - same results in Outlook 2010 for User2010):

Single appointments

Recurrent appointments:

What did we do with appointment in organizer's mailbox?

Lets have a look

We changed PidLidAppointmentStartWhole and PidLidAppointmentEndWhole:

Also we updated PidLidAppointmentTimeZoneDefinitionStartDisplay and PidLidAppointmentTimeZoneDefinitionEnsDisplay (now it is insanely long)

Time Zone Definition:

bMajorVersion = 0x02 (2)

bMinorVersion = 0x01 (1)

cbHeader = 0x0030 (48)

wReserved = 0x0002 (2)

cchKeyName = 0x0015 (21)

szKeyName = Russian Standard Time

cRules = 0x0006 (6)

 

TZRule[0x0].bMajorVersion = 0x02 (2)

TZRule[0x0].bMinorVersion = 0x01 (1)

TZRule[0x0].wReserved = 0x003E (62)

TZRule[0x0].wTZRuleFlags = 0x0000 = 0x0

TZRule[0x0].wYear = 0x07DA (2010)

TZRule[0x0].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x0].lBias = 0xFFFFFF4C (-180)

TZRule[0x0].lStandardBias = 0x00000000 (0)

TZRule[0x0].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x0].stStandardDate.wYear = 0x0 (0)

TZRule[0x0].stStandardDate.wMonth = 0xA (10)

TZRule[0x0].stStandardDate.wDayOfWeek = 0x0 (0)

TZRule[0x0].stStandardDate.wDay = 0x5 (5)

TZRule[0x0].stStandardDate.wHour = 0x3 (3)

TZRule[0x0].stStandardDate.wMinute = 0x0 (0)

TZRule[0x0].stStandardDate.wSecond = 0x0 (0)

TZRule[0x0].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x0].stDaylightDate.wYear = 0x0 (0)

TZRule[0x0].stDaylightDate.wMonth = 0x3 (3)

TZRule[0x0].stDaylightDate.wDayOfWeek = 0x0 (0)

TZRule[0x0].stDaylightDate.wDay = 0x5 (5)

TZRule[0x0].stDaylightDate.wHour = 0x2 (2)

TZRule[0x0].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x0].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x0].stDaylightDate.wMilliseconds = 0x0 (0)

 

TZRule[0x1].bMajorVersion = 0x02 (2)

TZRule[0x1].bMinorVersion = 0x01 (1)

TZRule[0x1].wReserved = 0x003E (62)

TZRule[0x1].wTZRuleFlags = 0x0000 = 0x0

TZRule[0x1].wYear = 0x07DB (2011)

TZRule[0x1].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x1].lBias = 0xFFFFFF4C (-180)

TZRule[0x1].lStandardBias = 0x00000000 (0)

TZRule[0x1].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x1].stStandardDate.wYear = 0x0 (0)

TZRule[0x1].stStandardDate.wMonth = 0x1 (1)

TZRule[0x1].stStandardDate.wDayOfWeek = 0x6 (6)

TZRule[0x1].stStandardDate.wDay = 0x1 (1)

TZRule[0x1].stStandardDate.wHour = 0x0 (0)

TZRule[0x1].stStandardDate.wMinute = 0x0 (0)

TZRule[0x1].stStandardDate.wSecond = 0x0 (0)

TZRule[0x1].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x1].stDaylightDate.wYear = 0x0 (0)

TZRule[0x1].stDaylightDate.wMonth = 0x3 (3)

TZRule[0x1].stDaylightDate.wDayOfWeek = 0x0 (0)

TZRule[0x1].stDaylightDate.wDay = 0x5 (5)

TZRule[0x1].stDaylightDate.wHour = 0x2 (2)

TZRule[0x1].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x1].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x1].stDaylightDate.wMilliseconds = 0x0 (0)

 

TZRule[0x2].bMajorVersion = 0x02 (2)

TZRule[0x2].bMinorVersion = 0x01 (1)

TZRule[0x2].wReserved = 0x003E (62)

TZRule[0x2].wTZRuleFlags = 0x0000 = 0x0

TZRule[0x2].wYear = 0x07DC (2012)

TZRule[0x2].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x2].lBias = 0xFFFFFF10 (-240)

TZRule[0x2].lStandardBias = 0x00000000 (0)

TZRule[0x2].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x2].stStandardDate.wYear = 0x0 (0)

TZRule[0x2].stStandardDate.wMonth = 0x0 (0)

TZRule[0x2].stStandardDate.wDayOfWeek = 0x0 (0)

TZRule[0x2].stStandardDate.wDay = 0x0 (0)

TZRule[0x2].stStandardDate.wHour = 0x0 (0)

TZRule[0x2].stStandardDate.wMinute = 0x0 (0)

TZRule[0x2].stStandardDate.wSecond = 0x0 (0)

TZRule[0x2].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x2].stDaylightDate.wYear = 0x0 (0)

TZRule[0x2].stDaylightDate.wMonth = 0x0 (0)

TZRule[0x2].stDaylightDate.wDayOfWeek = 0x0 (0)

TZRule[0x2].stDaylightDate.wDay = 0x0 (0)

TZRule[0x2].stDaylightDate.wHour = 0x0 (0)

TZRule[0x2].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x2].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x2].stDaylightDate.wMilliseconds = 0x0 (0)

 

TZRule[0x3].bMajorVersion = 0x02 (2)

TZRule[0x3].bMinorVersion = 0x01 (1)

TZRule[0x3].wReserved = 0x003E (62)

TZRule[0x3].wTZRuleFlags = 0x0000 = 0x0

TZRule[0x3].wYear = 0x07DD (2013)

TZRule[0x3].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x3].lBias = 0xFFFFFF10 (-240)

TZRule[0x3].lStandardBias = 0x00000000 (0)

TZRule[0x3].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x3].stStandardDate.wYear = 0x0 (0)

TZRule[0x3].stStandardDate.wMonth = 0x0 (0)

TZRule[0x3].stStandardDate.wDayOfWeek = 0x0 (0)

TZRule[0x3].stStandardDate.wDay = 0x0 (0)

TZRule[0x3].stStandardDate.wHour = 0x0 (0)

TZRule[0x3].stStandardDate.wMinute = 0x0 (0)

TZRule[0x3].stStandardDate.wSecond = 0x0 (0)

TZRule[0x3].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x3].stDaylightDate.wYear = 0x0 (0)

TZRule[0x3].stDaylightDate.wMonth = 0x0 (0)

TZRule[0x3].stDaylightDate.wDayOfWeek = 0x0 (0)

TZRule[0x3].stDaylightDate.wDay = 0x0 (0)

TZRule[0x3].stDaylightDate.wHour = 0x0 (0)

TZRule[0x3].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x3].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x3].stDaylightDate.wMilliseconds = 0x0 (0)

 

TZRule[0x4].bMajorVersion = 0x02 (2)

TZRule[0x4].bMinorVersion = 0x01 (1)

TZRule[0x4].wReserved = 0x003E (62)

TZRule[0x4].wTZRuleFlags = 0x0002 = TZRULE_FLAG_EFFECTIVE_TZREG

TZRule[0x4].wYear = 0x07DE (2014)

TZRule[0x4].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x4].lBias = 0xFFFFFF4C (-180)

TZRule[0x4].lStandardBias = 0x00000000 (0)

TZRule[0x4].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x4].stStandardDate.wYear = 0x0 (0)

TZRule[0x4].stStandardDate.wMonth = 0xA (10)

TZRule[0x4].stStandardDate.wDayOfWeek = 0x0 (0)

TZRule[0x4].stStandardDate.wDay = 0x5 (5)

TZRule[0x4].stStandardDate.wHour = 0x2 (2)

TZRule[0x4].stStandardDate.wMinute = 0x0 (0)

TZRule[0x4].stStandardDate.wSecond = 0x0 (0)

TZRule[0x4].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x4].stDaylightDate.wYear = 0x0 (0)

TZRule[0x4].stDaylightDate.wMonth = 0x1 (1)

TZRule[0x4].stDaylightDate.wDayOfWeek = 0x3 (3)

TZRule[0x4].stDaylightDate.wDay = 0x1 (1)

TZRule[0x4].stDaylightDate.wHour = 0x0 (0)

TZRule[0x4].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x4].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x4].stDaylightDate.wMilliseconds = 0x0 (0)

 

TZRule[0x5].bMajorVersion = 0x02 (2)

TZRule[0x5].bMinorVersion = 0x01 (1)

TZRule[0x5].wReserved = 0x003E (62)

TZRule[0x5].wTZRuleFlags = 0x0000 = 0x0

TZRule[0x5].wYear = 0x07DF (2015)

TZRule[0x5].X = cb: 14 lpb: 0100000001000000000000000000

TZRule[0x5].lBias = 0xFFFFFF4C (-180)

TZRule[0x5].lStandardBias = 0x00000000 (0)

TZRule[0x5].lDaylightBias = 0xFFFFFFC4 (-60)

 

TZRule[0x5].stStandardDate.wYear = 0x0 (0)

TZRule[0x5].stStandardDate.wMonth = 0x0 (0)

TZRule[0x5].stStandardDate.wDayOfWeek = 0x0 (0)

TZRule[0x5].stStandardDate.wDay = 0x0 (0)

TZRule[0x5].stStandardDate.wHour = 0x0 (0)

TZRule[0x5].stStandardDate.wMinute = 0x0 (0)

TZRule[0x5].stStandardDate.wSecond = 0x0 (0)

TZRule[0x5].stStandardDate.wMilliseconds = 0x0 (0)

 

TZRule[0x5].stDaylightDate.wYear = 0x0 (0)

TZRule[0x5].stDaylightDate.wMonth = 0x0 (0)

TZRule[0x5].stDaylightDate.wDayOfWeek = 0x0 (0)

TZRule[0x5].stDaylightDate.wDay = 0x0 (0)

TZRule[0x5].stDaylightDate.wHour = 0x0 (0)

TZRule[0x5].stDaylightDate.wMinute = 0x0 (0)

TZRule[0x5].stDaylightDate.wSecond = 0x0 (0)

TZRule[0x5].stDaylightDate.wMilliseconds = 0x0 (0)

 

In other words: for Organizer we rewrote all necessary attributes like if we recreated meeting with correct configuration. Cool!

On attendee's side:

We received a message with meeting update information:

However, single appointment updates do not contain TZ definition.

 

For recurrent appointments, we have TZ definition in update.

Also pay attention that it is 448 bytes long.

From user2007's client perspective everything is fine

Single appointments

Recurrent appointments

Cool!

Okay, next patient – User2013

Same updates (no surprise). However, a bit different user's experience.

Single appointments shifted (as we changed appointment start/end time in UTC, but didn't change TZ definition).

Recurrent appointment is fine (as we updated start end time and TZ definition).

Let’s try Daylight Saving Update Mode

Same update and same issue for single appointments

Okay, our problem is that if we update single appointments we do not update TZ definition. How can we manage it? Let’s check what happens if we try move from one zone to absolutely another one.

I'll move my User2010 to Atlantis (for whom else do we have -02:00 UTC TZ?)

Unfortunately, again we did not send TZ definition

Instead of recurrent meeting

And of cause no update for PidLidAppointmentTimeZoneDefinitionStartDisplay and PidLidAppointmentTimeZoneDefinitionEnsDisplay.

Time to return home

Issue is still here:

Conclusion:

Time Zone Data Update Tool for Microsoft Office Outlook works fine if all clients are legacy (2007). For clients 2010 and 2013 we see issue with single appointments (they «corrected» twice). In addition, it works fine for recurrent appointments. Unfortunately it not so careful for single appointments. On the other hand, single appointments will end eventually (instead of endless recurrent appointments).

Comments

  • Anonymous
    January 01, 2003
    Mikhail Stepanov, change your system time to year 2015. Issue will gone.
  • Anonymous
    January 01, 2003
    Meetings created OWA displayed with a shift in Outlook.
    Factually single appointment created in OWA 2010/2013 while server has 2014 year will affected.
    Workarounds:
    1 Use same Time Zone but from other region (Nairobi for Moscow, etc.)
    2 When 2015 comes, restart CAS (2010) or MBX (2013) server and NEW appointments will be created in a right way.
    I filled bug for it. Currently targeted to SP3 RU9 / CU8 (can be changed).
  • Anonymous
    January 01, 2003
    Hello, Dmitry.

    What I should do if KB2998527 installed on 26 sept, but user calendars not fixed yet?
    I start tool on user PC and can't find anything (only recurring appointments that is not was changed in this interval)
    Strange situation, I open recurrent appointment and see in options that TZ is UTC+3, but if open via MFCMAPI I see GMT +0400 (cb 54).
  • Anonymous
    January 01, 2003
    Valery, what Outlook and Exchange versions used?
    Can you please provide information about Named prop name your are mentioned?
    PidLidTimeZoneDescription - just a string with some user friendly TZ name
    PidLidAppointmentTimeZoneDefinitionStartDisplay stores TimeZone Definition
  • Anonymous
    October 09, 2014
    As already, that is mentioned in http://blogs.technet.com/b/dst2007/archive/2014/08/22/announcement-update
  • Anonymous
    November 07, 2014
    Dmitry, are you aware of the 2104 Russia DST update not working with BES and GOOD? We have OL 2k10 and E2k10 SP3 +, OL looks fine but appointments are wrong on the BES and Good platforms?
  • Anonymous
    November 09, 2014
    Also, check what happen with meeting after 7th of January 2015 - you'll be surprised =)
  • Anonymous
    November 27, 2014
    Khrebin Dmitry, tested changing the system time to year 2015 but issue remains in Outlook 2013 with RTZ
    Exchange 2010 SP3 RU 6
    Outlook 2013 (15.0.4641.1001) 32 bit