ical multi-full-day is missing one day - calendar

If I have a multi fullDay event in my generated ical, it is missing the last day. Screenshot of the calendar below.
This ical event MultiFullday should be from 21/05 - 24/05 (21 and 24 included), but 24/05 is excluded
BEGIN:VEVENT
DTSTART;VALUE=DATE:20170521
DTEND;VALUE=DATE:20170524
UID:590b6335922a5
DTSTAMP:20170504T192157Z
LOCATION:
DESCRIPTION:
URL;VALUE=URI:
SUMMARY:MultiFullday
END:VEVENT
This ical event Test Fullday should be only on 25/05 and it is.
BEGIN:VEVENT
DTSTART;VALUE=DATE:20170525
DTEND;VALUE=DATE:20170525
UID:590b63359237b
DTSTAMP:20170504T192157Z
LOCATION:
DESCRIPTION:
URL;VALUE=URI:
SUMMARY:Test Fullday
END:VEVENT
The events are wrapped into this
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Vereinsplaner//Vereinsplaner v1.0//DE
URL:https://www.vereinsplaner.at/ical/user/58b7118b6d716e7478abb2.ics
NAME:Vereinsplaner
X-WR-CALNAME:Vereinsplaner
DESCRIPTION: Termine von Vereinsplaner.at
X-WR-CALDESC:Termine von Vereinsplaner.at
X-WR-RELCALID:VereinsplanerCal
COLOR:11:174:219
X-WR-TIMEZONE:UTC
X-PUBLISHED-TTL:PT1H
CALSCALE:GREGORIAN
METHOD:PUBLISH
... // Between here
END:VCALENDAR
When i import the ical, this is the result. As you can see the multi fullDay event is missing the last day
According to this Mulit-Day All-Day Event , my DTSTART and DTEND are in the right format.

In the meantime i solved this problem by adding a day to the enddate.
According to this Fullcalendar end date wrong by one day the enddate is not included.
instead of
DTSTART;VALUE=DATE:20170521
DTEND;VALUE=DATE:20170524
I write
DTSTART;VALUE=DATE:20170521
DTEND;VALUE=DATE:20170525
I am open for any other solution. But maybe this answer will help anybody else.

Related

ical4j: add organizer who is able to cancel an event?

I am using ical4j to send out emails with a calendar attachment. I am able to add an organizer based on this SO post: How should I use iCal4j to add a meeting organizer to an iCal event
event.getProperties().add(new Organizer("mailto:bob#example.com"));
The problem is that no attendees added to the calendar is able to cancel an event. If I create (manually, no ical4j) an calendar appointment in Outlook Online, I am able to cancel an event as shown below:
However, the email with an ical4j attachment I received as the organizer (see the above code example) only gives me three options: Yes, No, Maybe as shown below:
How can I make someone among an meeting's attendees be able to cancel the meeting?
------- Update 11/15 -------
Based on the suggestion from #fortuna, my program generated the following event. I am still unable to cancel an event.
BEGIN:VCALENDAR
PRODID:-//Events Calendar//iCal4j 3.0.1//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20211115T144506Z
DTSTART;TZID=America/New_York:20211215T110000
DTEND;TZID=America/New_York:20211215T114500
SUMMARY:ABC123 School
TZID:America/New_York
LOCATION:Virtual
UID:153ab747-bbd2-4964-9112-9fa0d29ed306
STATUS:CONFIRMED
ORGANIZER;ROLE=CHAIR:mailto:dev1#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT:mailto:dev2#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT:mailto:dev1#gmail.com
END:VEVENT
END:VCALENDAR
I manually generated an event in Outlook Online and forwarded it to my yahoo account to get the calendar attachment:
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2010
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
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
ORGANIZER;CN="dev1":mailto:dev1#example.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=dev2
g:mailto:dev2#yahoo.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="dev3"
:mailto:dev3#example.com
DESCRIPTION;LANGUAGE=en-US:\n\n\n________________________________________\n
From: dev1 <dev1#example.com>\nSent: Monday\, November 15\, 2021 8:5
2:23 AM (UTC-05:00) Eastern Time (US & Canada)\nTo: dev3\; dev1\,
\nSubject: test\, please ignore it.\nWhen: Monday\, N
ovember 22\, 2021 10:30 AM-11:00 AM.\nWhere:\n\ntest\n\n__________________
______________________________________________________________\nMicrosoft
Teams meeting\nJoin on your computer or mobile app\nClick here to join the
.....
cdd5fc5d11c&threadId=19_meeting_OGYzZjAdddxMjYtYYy00ZDE4LWE0NjctZjY4OTA0ZG
I0ZTQ4#thread.v2&messageId=0&language=en-US>\n____________________________
____________________________________________________\n
UID:040000008200E00074C5B7101A82E00800000000933C540328DAD701000000000000000
0100000001771BBC5CAD45B499CBF167EE077185B
SUMMARY;LANGUAGE=en-US:FW: another test for GRD\, please ignore it.
DTSTART;TZID=Eastern Standard Time:20211122T103000
DTEND;TZID=Eastern Standard Time:20211122T110000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20211115T135223Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
X-MICROSOFT-CDO-APPT-SEQUENCE:0
X-MICROSOFT-CDO-OWNERAPPTID:2119924365
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:0
X-MICROSOFT-ONLINEMEETINGINFORMATION:{"OnlineMeetingChannelId":null\,"Onlin
eMeetingProvider":3}
X-MICROSOFT-ONLINEMEETINGTOLLNUMBER:+1 571-429-6038
X-MICROSOFT-ONLINEMEETINGCONFERENCEID:475654328
X-MICROSOFT-SKYPETEAMSMEETINGURL:https://teams.microsoft.com/l/meetup-join/
19%3ameeting_OGYzZjAxMjYtYzFlYy00ZDE4LWE0NjctZjY4OTA0ZGI0ZTQ4%40thread.v2/
0?context=%7b%22Tid%22%3a989b5e2ddda-14e4-4efe-93b7-8cdd5fc5d11c%22%2c%22O
id%22%3a%2256f6a1be-b722-47fd-b69c-5950f281818f%22%7d
X-MICROSOFT-SCHEDULINGSERVICEUPDATEURL:https://api.scheduler.teams.microsof
t.com/teams/989b5e2a-14e4-4efe-9ddd5fsasdfc5d11c/56f6a1be-b722-47fd-b69c-5
950f281818f/19_meeting_OGYzZjddYtYzFl4Ysa00ZDE4LWE0NjctZjY4OTA0ZGI0ZTQ4#th
read.v2/0
X-MICROSOFT-SKYPETEAMSPROPERTIES:{"cid":"19:meeting_OGYzZjAxMjYtYzFlYy00ZDE
4LWE0NjctZjY4OTA0ZGI0ZTQ4#thread.v2"\,"rid":0\,"mid":0\,"uid":null\,"priva
te":true\,"type":0}
X-MICROSOFT-ONLINEMEETINGCONFLINK:conf:sip:dev1#example.com\;gruu\;opaque=app:
conf:focus:id:teams:2:0!19:meeting_OGYzZxAxMjYtdasYzFlYy00Z4LWE0NjctZjY4OTA
0ZGI0ZTQ4-thread.v2!56f6a1beb72247fdb69c5818dasdfsadf!989b5e2a14e44efe93b78
cdd5fc5d11c
X-MICROSOFT-DONOTFORWARDMEETING:FALSE
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MICROSOFT-LOCATIONS:[]
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR
I suspect you may need to add something like a participation role to your organizer property:
https://datatracker.ietf.org/doc/html/rfc5545#section-3.2.16
e.g. ORGANIZER;ROLE=CHAIR:bob#example.com
Another way to find out how Outlook does it is to forward the event "as icalendar" to another email address and inspect the ".ics" attachment.

ICS in Exchange/Outlook updates not working

I have generated an ICS file with an appointment (example 1). This appointment can change often so I would like to send out new ICS files (using my backend). This would normally work by sending the file with the same appointment UID and a higher SEQUENCE (example 2). This works great with iCloud Calendar where the existing item gets moved to the new date but does NOT work with Exchange/Google Calendar.
Any ideas in how to make ICS updates update the existing calendar item in Exchange (without complicated subscriptions/setting up a webcal server)?
Example 1: Initial ICS
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:adamgibbons/ics
METHOD:PUBLISH
X-PUBLISHED-TTL:PT1H
BEGIN:VEVENT
UID:2211#planning.company.nl
SUMMARY:Planning Item 01
DTSTAMP:20191123T170300Z
DTSTART:20191123T123000Z
DTEND:20191123T143000Z
SEQUENCE:1
DESCRIPTION:Planning Item 01
END:VEVENT
END:VCALENDAR
Example 2: Updated ICS
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:adamgibbons/ics
METHOD:PUBLISH
X-PUBLISHED-TTL:PT1H
BEGIN:VEVENT
UID:2211#planning.company.nl
SUMMARY:Planning Item 01
DTSTAMP:20191129T170300Z
DTSTART:20191129T123000Z
DTEND:20191129T143000Z
SEQUENCE:0
DESCRIPTION:Planning Item 01
END:VEVENT
END:VCALENDAR
While the DTSTAMP in example 2 is after the one in example 1, your SEQUENCE is backward (initial = 1, update = 0).

Issue with Google calendar ICS file import

I'm trying to create a program which help me to import programmatically my school event. The output file (calendarXXXXX...ics) looks like this:
BEGIN:VCALENDAR
PRODID:xxx
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTART:20171023T140000Z
DTEND:20171023T160000Z
UID:xxx
CREATED:20171017T165457Z
DESCRIPTION:xxx
LOCATION:xxx
STATUS:CONFIRMED
SUMMARY:xxx
END:VEVENT
BEGIN:VEVENT
DTSTART:20171025T090000Z
DTEND:20171025T130000Z
UID:xxx
CREATED:20171017T165457Z
DESCRIPTION:xxx
LOCATION:xxx
STATUS:CONFIRMED
SUMMARY:xxx
END:VEVENT
END:VCALENDAR
When I try to import this file in Google Calendar it told me that it had elaborated all Y events, but only one was imported. Someone can help me with some suggest?
A event UID is important - it's a unique identifier. If you used xxx for all of them, google probably treated it all as relating the same event.
Try validating your ics files. The validators are not perfect but they help.
https://icalendar.org/validator.html and http://severinghaus.org/projects/icv/ say missing DTSTAMPs
http://ical-validator.herokuapp.com/ says:
! CRLF should be used for newlines
Related RFC 5545 section: 3.1
! UID [xxx] encountered multiple times
Related RFC 5545 section: 3.8.4.7

Excluded dates from a recurring events are not excluded when imported in google calendar

I'm exporting a recurring events where i specify some excluded dates. This is how i specify them
EXDATE:20121202T230000Z,20121204T230000Z,20121206T230000Z
They are in Zulu ( GMT ) time. I f import the same event in outlook the exclusion works as expected.
What am i doing wrong?
what is your DTSTART? is that a DATETIME or just a DATE? also what is your RRULE?
trying with below it worked on google calendar:
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:ical2list
BEGIN:VEVENT
DTSTART:20121201T230000Z
RRULE:FREQ=DAILY
UID:so13662467
DTSTAMP:20121201T230000Z
EXDATE:20121202T230000Z,20121204T230000Z,20121206T230000Z
END:VEVENT
END:VCALENDAR

All-day event in Lotus Notes using iCalendar

I am trying to create an .ics file that can be used to import all-day events.
I'm using the following code in the .ics file:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1#example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe#example.com
DTSTART;TSID="GMT":20110719T040000
DTEND;TSID="GMT":20110719T200000
TRANSP:OPAQUE
SUMMARY:Holiday
X-LOTUS-UPDATE-SEQ:1
X-LOTUS-NOTESVERSION:2
X-LOTUS-APPTTYPE:2
END:VEVENT
END:VCALENDAR
I exported a test all-day event, so I could check the formatting, but it still does not display in the top panel as an all-day event.
Does anyone know how to get an event to appear as an all-day event in Lotus Notes?
The correct solution was to remove the time from the DTSTART and DTEND e.g.
DTSTART;TSID="GMT":20110719T040000 ==> DTSTART;TSID="GMT":20110719
Hope this helps some people.
This is a working example:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//innerjoin.org/NONSGML Innerjoin iCal Test Case Gen 20050301//EN
BEGIN:VEVENT
UID:20050301-96412-innerjoin-org
DTSTART;VALUE=DATE:20050301
DTEND;VALUE=DATE:20050302
DTSTAMP:20050301
URL:
http://www.innerjoin.org/iCalendar/test-cases/20050301-20050302.txt
SUMMARY:
Event from 20050301 to 20050302
DESCRIPTION:
Event starting at 20050301 and lasting until 20050302\n
- Option: Starting on 20050301\n
- Option: Ending on 20050302\n
- Default: No timezone specified\, using local time\n
- Default: No status given\, not necessarily confirmed\n
- Default: No class given\, treat event details as publicly accessible\n
- Default: Event treated as opaque
END:VEVENT
END:VCALENDAR

Resources