diff --git a/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs b/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs
index 937c9455a..f97f0bd50 100644
--- a/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs
+++ b/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs
@@ -69,20 +69,37 @@ private RecurrencePattern ProcessRecurrencePattern(IDateTime referenceDate)
r.Until = DateUtil.MatchTimeZone(referenceDate, new CalDateTime(r.Until, referenceDate.TzId)).Value;
}
- if (r.Frequency > FrequencyType.Secondly && r.BySecond.Count == 0 && referenceDate.HasTime
- /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
+ if (referenceDate.HasTime)
{
- r.BySecond.Add(referenceDate.Second);
- }
- if (r.Frequency > FrequencyType.Minutely && r.ByMinute.Count == 0 && referenceDate.HasTime
- /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
- {
- r.ByMinute.Add(referenceDate.Minute);
+ if (r.Frequency > FrequencyType.Secondly && r.BySecond.Count == 0 && referenceDate.HasTime
+ /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
+ {
+ r.BySecond.Add(referenceDate.Second);
+ }
+ if (r.Frequency > FrequencyType.Minutely && r.ByMinute.Count == 0 && referenceDate.HasTime
+ /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
+ {
+ r.ByMinute.Add(referenceDate.Minute);
+ }
+ if (r.Frequency > FrequencyType.Hourly && r.ByHour.Count == 0 && referenceDate.HasTime
+ /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
+ {
+ r.ByHour.Add(referenceDate.Hour);
+ }
}
- if (r.Frequency > FrequencyType.Hourly && r.ByHour.Count == 0 && referenceDate.HasTime
- /* NOTE: Fixes a bug where all-day events have BySecond/ByMinute/ByHour added incorrectly */)
+ else
{
- r.ByHour.Add(referenceDate.Hour);
+ // The BYSECOND, BYMINUTE and BYHOUR rule parts MUST NOT be specified
+ // when the associated "DTSTART" property has a DATE value type.
+ // These rule parts MUST be ignored in RECUR value that violate the
+ // above requirement(e.g., generated by applications that pre - date
+ // this revision of iCalendar).
+ r.BySecond.Clear();
+ r.BySecond.Add(0);
+ r.ByMinute.Clear();
+ r.ByMinute.Add(0);
+ r.ByHour.Clear();
+ r.ByHour.Add(0);
}
// If BYDAY, BYYEARDAY, or BYWEEKNO is specified, then
@@ -898,6 +915,14 @@ private Period CreatePeriod(DateTime dt, IDateTime referenceDate)
return new Period(newDt);
}
+ ///
+ /// Evaluate the occurrences of this recurrence pattern.
+ ///
+ /// The reference date, i.e. DTSTART.
+ /// Start (incl.) of the period occurrences are generated for.
+ /// End (excl.) of the period occurrences are generated for.
+ /// Whether the referenceDate itself should be returned. Ignored as the reference data MUST equal the first occurrence of an RRULE.
+ ///
public override HashSet Evaluate(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults)
{
if ((this.Pattern.Frequency != FrequencyType.None) && (this.Pattern.Frequency < FrequencyType.Daily) && !referenceDate.HasTime)