3

I'm using OS X 10.8.2, iOS 6.0, and an iCloud calendar shared between the two. I have timezone support enabled. When I accept an emailed ics calendar invitation, it shows up in iCloud calendar with "timezone: floating". The invitation originated from EST and I am on PDT, so it shows up on my iOS and OSX calendars three hours late.

None of the calendar apps will let me change the timezone of the event. Looking at the ics raw data, I see that it was created by MS Exchange Server and I see that it specifies a timezone:

BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2007
VERSION:2.0
BEGIN:VTIMEZONE
TZID:(UTC-05:00) Eastern Time (US & Canada)
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT

Possibly something could be done by the originator or by the Exchange admin, but it's a serious imposition to ask folks to go hunting for configuration problems because of what will look to them like a problem on my end.

How can I fix this? Is there a way to force iOS, OS X, or the iCloud web site to correct the timezone?

2 Answers 2

2

The answer is yes. I've written an AppleScript that will convert the incorrect Exchange produced TZID to a properly formatted one. This means the fix is only on Mac OS.

I've a post on this, https://thefragens.com/ical-exchange-time-zone-fix-chapter-3/

Let's start at the beginning. Sometimes integration of a Mac in the corporate environment is a bit difficult and takes a bit of ingenuity. This is especially true when dealing with Exchange. The current versions of iCal and iCal Server are CalDAV and iCalendar compliant. Only Outlook 2007 is said to be CalDAV and iCalendar compliant. Previous versions of Outlook are not compliant and don’t play well with other calendar applications. Here’s the actual time zone (TZID) spec and the spec for how it should be formatted. You can see by looking at it that the TZID that Outlook produces is non-compliant.

A quick Google search shows an article or two that explain this very well.

I've found that there are at least 3 different types of invites that can be sent by Exchange/Outlook.

  1. METHOD:REQUEST - This is the usual email requesting that you attend a meeting.
  2. METHOD:PUBLISH - This is essentially a publication notice for an event. It doesn't ask you to reply.
  3. METHOD:CANCEL - This is a cancellation notice for an event.

Additionally, I've found that the emails that contain these invites are formated in at least 3 different ways. Sometimes the calendar event is within the body of the message and is encoded with Content-Transfer-Encoding in either 8bit or quoted-printable. Always the .ics file is attached.

My script does the following:

  1. It parses the message to either extract the calendar data from the body of the message or from the .ics attachment.
  2. It then figures out if the invite is of type METHOD:REQUEST, METHOD:PUBLISH or METHOD:CANCEL.
  3. If the invite is one of the first 2 types. The time zone is fixed and the event is imported into iCal. You might have to select into which calendar the event will be imported.
  4. If the invite is of type METHOD:CANCEL then the script will locate the corresponding event and set it's status to cancelled.

    • You will have to manually delete the event. It will appear in iCal to have a white strike-through font style.
    • Repeating events all seem to have the same UID (Unique IDentifier).

I don't know why. Every repeating event will be thusly marked as cancelled. You will then manually delete the specific event and manually run the script again while the cancellation message is selected. This will reset the remaining repeating events back to confirmed. Yes, I know this is a bit of a kludge but I don't have a better method.

  1. It will parse the message to allow for invites from multiple Exchange servers.

My script, now re-named iCal-Invite-Fix.scpt, will need to be customized for each Exchange server from which you receive invites. There are 3 properties at the beginning of the script. They are exchange_fragment, ical_tzid and myCalendar. These first two properties are lists and the order of the items is crucial. The specific item (position in list) of each list must correspond to each other.

  • exchange_fragment is a unique fragment of the TZID that your Exchange server sends.
  • ical_tzid is the time zone of the Exchange server in proper format.
  • This means no spaces, though spaces are replaced automatically with the underscore '_'.
  • For instance, I'm in Southern California and the correct time zone should be written as US/Pacific or America/Los_Angeles. You can find this information by selecting the time zone drop down menu in the upper right corner of your iCal window and select Other.... If you look in iCal's upper right corner for the time zone menu bar the last example will appear as America/Los Angeles.
  • myCalendar is the name of the calendar that normally receives the events. It is needed for the cancellation to function.

enter image description here

As the image above shows there are now only 2 properties, both of which are lists. These lists work together as an array; which means the order of the list items is crucial.

  • exchange_fragment contains unique fragments of the TZID that the Exchange server sends.
  • ical_tzid contains the tzid info that iCal expects to see.

Save the script and either set it up to run from a mail rule or as I do call it from the System AppleScript menu. You will need to save the script in ~/Library/Scripts/Applications/Mail/ folder. Create this folder if it doesn’t exist.

To set the script up to run automatically you will need to create a new Mail rule as follows.

  1. Mail -> Preferences -> Rules -> Add Rule
  2. Description "iCal Invite Fix"
  3. If "any" of the following conditions are met:
    • "Any Attachment Name" "ends with" ".ics"
  4. Perform the following actions:
    • Run AppleScript "~/Library/Scripts/Applications/Mail/iCal-Invite-Fix.scpt"
  5. Click "OK" and then "Apply"

enter image description here

You can also run the script manually from the system-wide script menu. To install this menu. Open up the /Applications/AppleScript/AppleScript Utility.app and check the Show Script menu in menu bar box. If you put the script in the folder location indicated above it will now be visible when Mail.app is the current application.

Download the iCal-Invite-Fix script.

Please let me know if there are any problems or you need help setting this up. The script was not entirely my creation and credit also goes to others. I’m quite certain any errors are likely mine. ;-)

Updated 12/28/2008: Added ability to use single script with multiple Exchange servers. The trade-off is a slightly more complex set up.

5
  • Thanks for the reply. I've read through your blog post and skimmed the script code. It sounds like I would need one copy of the script per source Exchange server, correct? But it's not clear to me how to set the exchange_fragment and ical_tzid properties in the script. For example what is "a unique fragment of the Exchange Server's TZID"?
    – mblakele
    Oct 16, 2012 at 15:49
  • The most recent copy of the script will work with multiple Exchange servers. You have to edit the script to add a unique fragment from each Exchange server and it's corresponding "correct" TZID. In your exchange_fragment is "Eastern Time" and ical_tzid is "US/Eastern".
    – afragen
    Oct 18, 2012 at 3:52
  • I think I have it working, thanks. I had to make several changes to avoid sandbox problems, so I'll try to contact you offline to pass those along.
    – mblakele
    Oct 18, 2012 at 20:38
  • Links provided in the answer are not working @afragen Feb 28, 2019 at 7:39
  • Links have been updated.
    – afragen
    Mar 7, 2019 at 14:19
-2

I have used Outlook for telecons in many time zones on my PC Windows environment for many years. I never had a problem with a meeting invite being incorrectly scheduled due to the event being scheduled in a different time zone than I am in. Outlook always looks at the meeting invite, sees that it was scheduled in a different time zone, then schedules the event so it occurs at the proper time.

Now I get an iPhone and set up iCloud to work with my Outlook calendar. All of a sudden, the iCloud calendar looks real stupid. It doesn't bother to notice that the events are being scheduled in a different time zone and schedules them at whatever time it was in the time zone from which they were sent. So I am either one hour late or early for my telecons depending on whether they were sent from some one either east or west of me respectively. This is pretty dumb. I expected more from Apple.

I have fiddled with the time zone support in both iClound and on my I phone. It didn't help. I have read all the stuff about how time zones are so complex and hard as if the problem is insurmountable. This is allot of junk. Outlook has been doing this for years no problem.

I love my iPhone, but am very disappointed that Apple can't get their act together on this.

1
  • 1
    Hi and welcome to Ask Different. Posting in the answers section is specifically reserved for posting direct answers to the question being asked. The Stack Exchange Q&A format is different from your typical forum, it's not meant for discussion or commenting. For more information please see our Help section. Consider deleting this as it will likely continue to attract down votes for not being a direct answer to the question or improving it to be a direct answer.
    – Ian C.
    May 13, 2014 at 23:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .