exclude time periods in iCalendar - icalendar

i have a very simple vevent "every Monday 9 to 5" and some time periods where this event doesn't take place. like 7.8.2011 to 24.10.2011. What is the best way to represent this in iCalendar?
a lot of EXDATEs? special EXRULEs?

Oh dear,
Exrule is deprecated now in RFC 5545, so best skip that one (although that would be neatest and most ics s/w probably still copes with it (like mine :), for compatibility )
EXDATES are valid, but gosh that would be cumbersome if you mean the whole period from 7 August to 24 October, you'd have to enter every week day
You possibly have to just create two events - although one could 'relate' them.
I have not tried it yet, have been thinking about if for a different reason, but there is the concept of 'RELATED-TO' with modifer RELTYPE (PARENT, SIBLING etc)
RELATED-TO;RELTYPE=SIBLING:19960401-080045-4000F192713#
example.com
Property Name: RELATED-TO
Purpose: This property is used to represent a relationship or
reference between one calendar component and another.
Value Type: TEXT
Property Parameters: IANA, non-standard, and relationship type
property parameters can be specified on this property.
Conformance: This property can be specified in the "VEVENT",
"VTODO", and "VJOURNAL" calendar components.
Description: The property value consists of the persistent, globally
unique identifier of another calendar component. This value would
be represented in a calendar component by the "UID" property.

Related

Google Sheets Auto-Parses Strings To Dates...Sometimes?

I'm using Google Sheets to scrape stock data from the tables on Yahoo Finance. For example, to grab a company's P/E Ratio, it's as simple as:
=INDEX(IMPORTHTML("https://finance.yahoo.com/quote/DELL","table", 2),3,2)
However, I'm running into an odd behavior when grabbing the earnings date. Yahoo Finance lists them in two possible formats: like "Feb 25, 2021" or like "Jan 28, 2021 - Feb 01, 2021"
In the first case, just grab the cell value exactly like above:
=INDEX(IMPORTHTML("https://finance.yahoo.com/quote/DELL","table", 2),5,2)
In the second, grab the cell value then parse out the first bit:
=LEFT(INDEX(IMPORTHTML("https://finance.yahoo.com/quote/KO","table", 2),5,2),12)
Now for the issue: it's inconsistent with how it treats the data. In the first case, it recognizes that the string "looks like" a date, & returns it directly as an actual date - as if the call were wrapped in DATEVALUE(), though obviously it is not. In the latter case, it returns it as a string, so you need to explicitly wrap it in DATEVALUE().
Why does it behave inconsistently, returning the first string as a date but the second string as a string? This makes it difficult to have one formula that handles both cases, as DATEVALUE() will break if you pass it something that's already a date (i.e. as in the first case).
Use your LEFT formula in both cases, add in the end *1 and format both as Date, for a single, consistent formula.
KO example
=LEFT(INDEX(IMPORTHTML("https://finance.yahoo.com/quote/KO","table", 2),5,2),12)*1
DELL example
=LEFT(INDEX(IMPORTHTML("https://finance.yahoo.com/quote/DELL","table", 2),5,2),12)*1

RRULE for first Advent

I am currently trying to setup my own holiday iCalendar to which I can subscribe on, since I don't want to depend on 3rd party services.
I am currently trying to make the the VEVENTs for Christmas. The 2nd, 3rd and 4th advent, as well as the Christmas holidays are straight forward, however I have big issues to model the 1st advent.
Specifically, the problem is that the first advent can be in November and December (27th November to 3rd Devember)
How can I make a recurring event (or, more specifically, the RRULE) to cover all cases for the 1st advent?
What I've tried
My first idea was this:
FREQ=YEARLY;INTERVAL=1;BYMONTH=11,12;BYMONTHDAY=27,28,29,30,1,2,3;BYDAY=SU
The idea was to just pick the one Sunday in between 27th November and 3rd December. This does of course not work because BYMONTH expands the search to all days in November and December, and BYMONTHDAY limits the search to those days in both months. I.e. November 1st, November 2nd, ... December 27th, December 28th, ..., which is of course not what I want.
Next, I tried to use BYYEARDAY=331,332,333,334,335,336,337 instead of BYMONTHDAY and BYMONTH, but unfortunately my webdav server (Nextcloud, which uses Sabre as far as I know. I got an error message "Invalid BYYEARDAY rule") does not support this.
My next idea was to use multiple RRULEs -- at least I did not see any passage in the RFC stating that only one RRULE is allowed at most. So I ended up with:
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=27,28,29,30;BYMONTH=11
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=1,2,3;BYMONTH=12
Didn't work as well. My last resort was to create two separate VEVENTs, one with the first RRULE above and one with the second RRULE above, but otherwise identical. This worked, but it left me confused.
Is there no better solution? How would you do it?
unfortunately my webdav server (Nextcloud, which uses Sabre as far as I know. I got an error message "Invalid BYYEARDAY rule") does not support this.
Well I think you should raise a bug report, because as far I can tell your solutions are correct and RFC-compliant.
I tried your solutions 2 and 3 with different libs (my own lib php-rrule, and rrule.js) and both options seems to work just fine.
FREQ=YEARLY;BYDAY=SU;BYYEARDAY=331,332,333,334,335,336,337
or combining 2
FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=27,28,29,30;BYMONTH=11
FREQ=YEARLY;INTERVAL=1;BYDAY=SU;BYMONTHDAY=1,2,3;BYMONTH=12
will both produce:
2018-12-02
2019-12-01
2020-11-29
2021-11-28
2022-11-27
2023-12-03
2024-12-01
2025-11-30
2026-11-29
2027-11-28
which according to Google and Wikipedia are the correct dates for the 1st Advent Sunday in the next 10 years.
Side note
at least I did not see any passage in the RFC stating that only one RRULE is allowed at most.
While not strictly forbidden, in RFC 5545 it's literally written everytime RRULE is mentioned:
;
; The following is OPTIONAL,
; but SHOULD NOT occur more than once.
;
rrule
Appendix A even states in the "New restrictions":
2. The "RRULE" property SHOULD NOT occur more than once in a
component.
That being said, multiple RRULE is a great feature, I don't know why they restricted it.
If I'm not mistaken, the first Advent is always the fifth last Sunday in a year. So the following rule should do the trick:
FREQ=YEARLY;BYDAY=-5SU
See the next 10 results: http://recurrence-expansion-service.appspot.com/reaas?dtstart=20181202&rrule=FREQ%3DYEARLY%3BBYDAY%3D-5SU&max_instances=10
Or to put it another way:
FREQ=YEARLY;BYDAY=SU;BYSETPOS=-5

Appointment Type in iCalendar

In normal LotusScript you can use the item "AppointmentType" to set: Appointment=0, Anniversary=1, Event=2, Invitation=3, Reminder=4.
I would like to use iCalendar, but I haven't found a way to include the type of an appointment in the format. I experimented with X-LOTUS-APPTTYPE, but without an effect (Appointment stays 4).
Thanks in advance!
If you want the type to be recognised by all calendar apps, then consider use a standard RFC 5545 field - maybe the CATEGORY field https://www.rfc-editor.org/rfc/rfc5545#section-3.8.1.2

vb6 error 380 Datepicker, bust just in certain dates

Im having a problem with a datepicker on vb6, but this jus happen on certain dates, for example 31/01/2017, but with another dates it works fine.
I appreciate the help
This almost certainly has to do with how you are setting the date in the control.
For instance if the control's value is ANY month that does not have 31 days then you will get that error. Trying to set the control to 31/02/2017 would cause an error 380.
There are two approaches you can take to fix this.
Reverse the order you set the date components.
dtFecha.Year = Year(fcsAux.Fields("xf3ch4"))
dtFecha.Month = Month(fcsAux.Fields("xf3ch4"))
dtFecha.Day = Day(fcsAux.Fields("xf3ch4"))
Set the Value property instead of the date components. dtFecha.Value = "31/02/2017"
dtFecha.Value = rcsAux.Fields("xf3ch4").Value
The first approach ensures the month is always appropriate for the day. The second approach sets the entire value at one shot and should be a valid date.

Schema.org type for a study course

I haven't been able to find any Schema.org type that fits a sheet describing the properties of a course from a university.
The HTML (without any semantic markup using Schema.org) would look more or less like this:
<section>
<h2>Fact sheet</h2>
<p><strong>Formal qualifications:</strong> Bachelor’s Degree in Design</p>
<p><strong>Credits</strong>: 240 ECTS</p>
<p><strong>Duration</strong>: 4 academic years or 240 ECTS</p>
<p><strong>School period</strong>: from October to June</p>
<p><strong>Timetable</strong>: Morning Group: from Monday to Friday from 9am to 2.30pm. Evening Group: from Monday to Friday from 3:30 pm to 9.00 pm * The college reserves the right to modify schedules.</p>
<strong>Price</strong>: 112 €/ 1 ECTS
…
</section>
I thought about using Product, but it lacks lots of things.
Any ideas?
As this thread still appears on search engines, perhaps it's better to update that a Course schema was released lately:
http://schema.org/Course
Google is also endorsing it at this moment:
https://developers.google.com/search/docs/data-types/courses (So far I haven't seen rich snippets "live" though).
I have implemented this and I have to admit that it is not exhaustive and there is still work to be done to improve it. I noticed that Coursera.org is using properties that are not released yet, so I believe that more properties will be coming soon.
For your information!
I would look into the Event part of the schema.org:
An event happening at a certain time and location, such as a concert,
lecture, or festival. Ticketing information may be added via the
'offers' property. Repeated events may be structured as separate Event
objects.
http://schema.org/Event
That seems like it should cover something like a course. (lecture)