我有 RFC 2445 指定格式的重复规则,我需要更新开始日期和结束日期。以下是一些示例:
DT开始:20240422T000000Z 规则:频率=每日;间隔=1;直到=20240427T235959Z
DT开始:20220826T040000Z 规则:频率=每日;间隔=1;直到=20220826T040000Z 开始时间:20220501T000000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU;UNTIL=20230114T235959Z 开始时间:20220930T040000Z 规则:频率=每日;间隔=1;直到=20220930T040000Z
由于我找不到任何具有此功能的库,因此我计划创建一个函数来更新开始日期和结束日期。
我创建了以下函数
private static string UpdateRecurrenceStartDate(DateTime startDate, DateTime endDate, string recurrence)
{
var pattern = @"(DTSTART:[0-9]{8}T[0-9]{6}Z).*?(UNTIL=[0-9]{8}T[0-9]{6}Z)";
var updatedRecurrence = Regex.Replace(recurrence, pattern, $"DTSTART:{startDate.ToString("yyyyMMddTHHmmssZ")} UNTIL:{endDate.AddDays(1).AddSeconds(-1).ToString("yyyyMMddTHHmmssZ")}");
return updatedRecurrence;
}
开始日期和结束日期未更新,这不起作用
看起来您使用的正则表达式模式可能无法正确捕获日期。
您的函数的以下修订版对其进行调整以正确捕获日期:
private static string UpdateRecurrenceStartDate(DateTime startDate, DateTime endDate, string recurrence)
{
var pattern = @"(DTSTART:[0-9]{8}T[0-9]{6}Z).*?(UNTIL=[0-9]{8}T[0-9]{6}Z)";
var updatedRecurrence = Regex.Replace(recurrence, pattern, $"DTSTART:{startDate.ToString("yyyyMMddTHHmmssZ")} UNTIL:{endDate.ToString("yyyyMMddTHHmmssZ")}");
return updatedRecurrence;
}
我还从
AddDays(1).AddSeconds(-1)
中删除了 endDate
,因为它似乎没有必要。