none
What are the appointmenttimezonedefinitionstartdisplay and appointmenttimezonedefinitionenddisplay properties on an appointment item and how can i create them ? RRS feed

  • Question

  • Hi,

    We have problem with one of our programs that syncs between our customn calendar software and exchange / office 365. When we create a whole day appointment item using our program. The appointment item gets displayed correctly in outlook as well as on android devices BUT it does not display correctly on ios devices. On the ios devices the appointment is being displayed over 2 days, which makes it seem that that the full day appointment last 2 days while it actually does not.

    I have traced the problem down to two missing properties which we don't create in our sync program that created the appointment but outlook does seem to create them if i create an appointment (from within outlook).

    Using Outlookspy i copied those 2 properties from an appointment created in outlook itselve to an appointment i had created using our syncing program and as soon as i added those the appointments displayed correctly on 1 day in the calendar app on ios devices.

    My question now is what are the appointmenttimezonedefinitionstartdisplay and appointmenttimezonedefinitionenddisplay properties, what data does it contain and how should i go about on creating the binary data that it contains ?

    Thanks


    Monday, July 25, 2016 11:59 AM

Answers

All replies

  • I have now figured out these are not the correct names for the properties they should be:

    PidLidAppointmentTimeZoneDefinitionStartDisplay and PidLidAppointmentTimeZoneDefinitionEndDisplay

    I still don't quite understand what exactly they are but it seems to be rules of some sort dealing with timezones / daylight saving time?

    I live in belgium as do all our clients.

    When i create an appointment item in outlook, outlook add's this in in the start one (a quick look at the end property the rule seems to be the same):

    Major ver:  0x02
    Minor ver : 0x02
    cbHeader  : 0x0030
    Reserved  : 0x0002
    cchKeyName: 0x0015
    KeyName      : Romance Standard Time
    cRules       : 0x0001
      Major ver:  0x02
      Minor ver : 0x02
      Reserved  : 0x003E
      TZRule flags  : TZRULE_FLAG_EFFECTIVE_TZREG
      wYear  : 1601 (0x0641)
      X      : 0100000001000000000000000000
      lBias  : -60 (0xFFFFFFC4)
      lStandardBias  : 0 (0x00000000)
      lDaylightBias  : -60 (0xFFFFFFC4)
      stStandardDate :
        wYear        : 0 (0x0000)
        wMonth       : 10 (0x000A)
        wDayOfWeek   : 0 (0x0000)
        wDay         : 5 (0x0005)
        wHour        : 3 (0x0003)
        wMinute      : 0 (0x0000)
        wSecond      : 0 (0x0000)
        wMilliseconds: 0 (0x0000)
      stDaylightDate :
        wYear        : 0 (0x0000)
        wMonth       : 3 (0x0003)
        wDayOfWeek   : 0 (0x0000)
        wDay         : 5 (0x0005)
        wHour        : 2 (0x0002)
        wMinute      : 0 (0x0000)
        wSecond      : 0 (0x0000)
        wMilliseconds: 0 (0x0000)

    I don't quite understand this rule. But since i and all our clients will always be in belgium is it safe to hardcode this rule for each appointment item i create in our program so that it gets displayed correctly on ios devices ?

    My guess is if i live in belgium and all our clients do and all there settings in outlook / windows etc are correctly configured to belgium's timezone / settings. That the value for PidLidAppointmentTimeZoneDefinitionStartDisplay and PidLidAppointmentTimeZoneDefinitionEndDisplay would never ever change ? or am i wrong in that assumption ?


    Monday, July 25, 2016 12:57 PM
  • Se the documentation on MSDN: https://msdn.microsoft.com/en-us/library/ee158467(v=exchg.80).aspx and https://msdn.microsoft.com/en-us/library/ee219682(v=exchg.80).aspx

    Dmitry Streblechenko (MVP)
    http://www.dimastr.com/redemption
    Redemption - what the Outlook
    Object Model should have been
    Version 5.5 is now available!

    • Marked as answer by davy willems Tuesday, July 26, 2016 3:37 PM
    Monday, July 25, 2016 8:53 PM
  • >>>I still don't quite understand what exactly they are but it seems to be rules of some sort dealing with timezones / daylight saving time?

    According to your description, PidLidAppointmentTimeZoneDefinitionStartDisplay contains a stream that maps to the persisted format of a TZDEFINITION structure, and PidLidTimeZoneStruct contains a stream that maps to the persisted format of a TZREG structure. To obtain the exact TZDEFINITION and TZREG structures, BinToTZDEFINITION and BinToTZREG are used to parse the stream values of these properties appropriately.

    For more information, click here to refer about How to: Read time zone properties from an appointment

    • Marked as answer by davy willems Tuesday, July 26, 2016 3:37 PM
    Tuesday, July 26, 2016 8:42 AM
  • My main problem was that i did not know how to generate them proper way and at first i could not find any information using google (until i the correct names came to light). Since all our customers live in belgium and the sync program is only used here i have hardcoded these 2 value to the value outlook seemd to use with all appointments i created (in future, during summertime or winter time, the value did not seem to change as far as i could see). I could not test by changing my system time itself though.

    It seems Android and Outlook itselve don't actually need this information (as far as i could tell, it displayed everything correctly if one did not specify them) but ever since IOS 8 it was needed for ios devices or synced appointmentitems (that i created using our sync program in exchange using mapi) would not display correctly on the ios calendar app (for example a single full day apointment displayed incorrectly as taking 2 days if these 2 tags were ommitted)

    Tuesday, July 26, 2016 3:42 PM