Hi Jake,
You observed correctly, the occurrences always have to be calculated from the beginning of the pattern.
I'm not a matematician to explain this properly, but an example is repeat every 2nd Tuesday cannot be calculated from any arbitrary date forward because you don't know whether the next Tuesday is "1st" and should be skipped or "2nd" and should be counted in. It can only be correctly calculated from the beginning of the pattern.
Maybe there are "simpler" patterns where an optimization could be used and occurrences calculated from any particular moment in time, but we don't have a developed theory on this.
You are also correct in noting that some patterns, especially when you come down to minutes or seconds become very heave in terms of occurrence numbers and calculating thousands of them every time is not convenient.
My personal point of view is that the iCalendar standard is a pretty limited and often awkward thing. I guess the problems you are experiencing can be attributed to the designers of the iCalendar standard thinking only of "human-specific" event, such as meetings, appointments etc and not giving a though to more frequent computer-related tasks such as batch processes etc.
The power of Aspose.iCalendar is in calculating complex patterns such as 2nd Monday of the Year, Last work day of a month and so on where you don't want to code such algorithms yourself. But when you talk about simple every 15 minute internal, it might pay ouf to actally just calculate those times yourself. You can also combine results from Aspose.iCalendar and your own. For example, use Aspose.iCalendar to calculate at least the day and maybe hour when you need to run the process, but use a simple loop to calculate minutes when you need to run it.
Roman Korchagin
Lead Developer,
Aspose Auckland Team